потому что Typescript не имеет отрицательного типа, а без него string
не может покрывать ключ, который не является a1
и a2
, 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'.
"детская площадка"
Я считаю, что это недостаток предложения об ошибке