typescript

[typescript] ~형식의 매개 변수에 할당될 수 없습니다. 'scending' 속성의 형식이 호환되지 않습니다. 'string' 형식은 '"desc" | "asc"' 형식에 할당할 수 없습니다.

문앵 2024. 7. 8. 12:34
const param = {
    sDate: "",
    eDate: "",
    dateType: "create_date",
    status: "all",
    searchType: "email",
    search: "",
    limit: 15,
    page,
    orderby: "",
    scending: "desc"
  }

 

이런 객체를 인자값으로 넘기고

호출한 함수의 매개 변수 타입이

export interface searchParams {
    dateType: string;
    sDate: string;
    eDate: string;
    searchType: string;
    search: string;
    status: string;
    limit: number;
    page: number;
    orderby: string;
    scending: "asc" | "desc";
}

이거였다.

 

scending의 값이 "desc" 로 되어있기 때문에 이게 scending의 타입으로 지정한 "asc" || "desc" 에 알맞은 값이라고 생각했다.

근데 여기서 계속 에러가 났다.

왜? 와이...!

생각해보니 예전에도 이거에서 에러 났었는데 귀찮아서 그냥 타입을 string으로 바꾸고 넘어갔었음.

근데 그렇게 하는건 안좋은것 같다. 타입 스크립트를 쓰는 이유가 없어짐

 

일단 왜인지 지피티형에게 물어봤다.

 

WHY?

더보기
더보기

에러 메시지가 발생하는 이유는 scending 속성의 타입이 'string'으로 정의되어 있지만,

함수의 매개변수 타입은 'asc' | 'desc'로 정의되어 있기 때문입니다.

 

이를 해결하려면 scending 속성을 명확하게 'asc' 또는 'desc'로 지정해야 합니다.

 

쉽게 말해, 

내가 선언한 객체에서 scending은 "값"이 desc이고 "타입"은 "string" 인 것이다.

근데 타입 선언에서는 "타입"이 "desc" 라고 해놨으니까 호환이 안된다는거다.

객체 리터럴 선언시 "자동 유형 확장"이 되기 때문에 타입이 자동으로 string이 되기 때문이다.

 

 

SOLVE

객체 리터럴 선언시 타입도 같이 선언해 준다.

...
scending : "desc" as const

 

그러면 타입이 "desc"가 됨

"desc" as "desc" 를 사용해도 됨.

 

 

 

반응형