카테고리 없음

타입스크립트 미스터리 - 배열과 key-value 오브젝트

hyuckkim 2023. 11. 26. 06:38

 

const test = [{a: 1}, {b: 2}]
type TestType = {[key: string]: number}[]

console.log(test as TestType);

 

이 코드는 작동하지 않는다.

Conversion of type '({ a: number; b?: undefined; } | { b: number; a?: undefined; })[]' to type 'TestType' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
  Type '{ a: number; b?: undefined; } | { b: number; a?: undefined; }' is not comparable to type '{ [key: string]: number; }'.
    Type '{ b: number; a?: undefined; }' is not comparable to type '{ [key: string]: number; }'.
      Property 'a' is incompatible with index signature.
        Type 'undefined' is not comparable to type 'number'.​

 

원인을 추측해보자면, 배열 내부의 {[key: string]: number} 타입이 배열의 첫 요소를 순회하는 과정에서 한 타입으로 고정된 다음 (아마 여기서는 { a: number; b?: undefined; } 로 고정되었을 것이다) 다음 요소를 순회할 때 고정된 타입으로 비교하는 것이 원인이 아닐까 싶다.

버그같은데.

 

 

const test = {0: {a: 1}, 1: {b: 2}}
type TestType = {[key: string]: {[key: string]: number}}

console.log(test as TestType);

 

이 코드는 작동한다.

왜.