Typescript 경고 1: 객체 리터럴 유형에서 문자열 리터럴 키와 문자열 키 혼합

이 시리즈는 직관적이지 않고 추론하기 어렵거나 추가 주의가 필요한 Typescript에서 내가 만난 혼란에 관한 것입니다.

경고의 원인은 버그 또는 결함으로 인한 것일 수도 있고 단순히 의도한 대로 작동하는 것일 수도 있습니다.

수시로 이 시리즈에 새 게시물을 추가하겠습니다.

Typescript에는 negate type이 없고 그것 없이는 stringa1a2가 아닌 키를 커버할 수 없기 때문에 string는 모든 키를 커버해야 합니다.

type A = {[x:string]:1, a1:1, a2:2} // error: Property 'a2' of type '2' is not assignable to 'string' index type '1'.

type a = A['something'] // 1
//   ^?
type a1 = A['a1'] // 1
//   ^?
type a2 = A['a2'] // hmm, we get 2, but it is useless
//   ^?

const A:A={something:1, a1:1, a2:2} // error: Type '2' is not assignable to type '1'.


지금까지는 좋았습니다. Typescript 오류 제안은 잘못된 방식으로 작업을 수행하는 것을 방지합니다.

그러나 교차를 사용하는 첫 번째 오류를 통과하는 경우가 있습니다.

type B = {[x:string]:1} & { b1:1, b2:2} // no error

type b = B['something']
//   ^?
type b1 = B['b1']
//   ^?
type b2 = B['b2']
//   ^?

const B:B={something:1, b1:1, b2:2} // error: Type '2' is not assignable to type '1'.


playground

이것은 오류 제안의 결함이라고 생각합니다.

좋은 웹페이지 즐겨찾기