Arrays 为什么允许在映射对象中索引具有无效键的数组
在typescript中,编译器允许我们对具有无效键的元组进行索引,从而推断Arrays 为什么允许在映射对象中索引具有无效键的数组,arrays,typescript,generics,tuples,mapped-types,Arrays,Typescript,Generics,Tuples,Mapped Types,在typescript中,编译器允许我们对具有无效键的元组进行索引,从而推断未知为无效字符串键,推断未定义为无效数字键。当使用像Promisetsc这样的对象进行索引时,tsc会推断出空对象 type Foo<T extends any[]> = { [K in T[number]] : T[K] } /* type x = { 4: undefined; toString: () => string; abcd: unknown;
未知
为无效字符串键,推断未定义
为无效数字键。当使用像Promise
tsc这样的对象进行索引时,tsc会推断出空对象
type Foo<T extends any[]> = {
[K in T[number]] : T[K]
}
/*
type x = {
4: undefined;
toString: () => string;
abcd: unknown;
1: "abcd";
}
*/
type x = Foo<['toString', 'abcd', 1, 4]>
/*
type y = {
[x: string]: unknown;
}
*/
type y = Foo<[string]>
/*
type z = {
[x: number]: number;
}
*/
type z = Foo<[number]>
/*
type l = {}
*/
type l = Foo<[symbol]>
/*
type f = {}
*/
type f = Foo<[Promise<number>]>
类型Foo={
[K in T[number]]:T[K]
}
/*
x型={
4:未定义;
toString:()=>字符串;
abcd:未知;
1:“abcd”;
}
*/
类型x=Foo
/*
y型={
[x:字符串]:未知;
}
*/
类型y=Foo
/*
类型z={
[x:编号]:编号;
}
*/
类型z=Foo
/*
类型l={}
*/
类型l=Foo
/*
类型f={}
*/
类型f=Foo
为什么允许这样做?为什么删除会扩展任何[]
绑定会产生编译错误,我希望在不删除它的情况下看到编译错误