Typescript 动态、变量或基于索引的泛型类型变量
我想键入一个函数,该函数以数组元素或数组的形式将各种Typescript 动态、变量或基于索引的泛型类型变量,typescript,typescript-generics,Typescript,Typescript Generics,我想键入一个函数,该函数以数组元素或数组的形式将各种类作为输入,数组由类及其方法的名称组成。诸如此类: fn([Class1,Class2,[Class3,'method3'],…,ClassN]); 我还想严格指出,如果选择了[[class,method]]模式,则可以只指定这个特定类的方法 type Class=new(…args:any[])=>T; 甲级{ a():任何{} } B类{ b():任何{} } // ... 函数fn(参数:数组< 类//引用此线程-以及以下代码- typ
类作为输入,数组由类及其方法的名称组成。诸如此类:
fn([Class1,Class2,[Class3,'method3'],…,ClassN]);
我还想严格指出,如果选择了[[class,method]]
模式,则可以只指定这个特定类的方法
type Class=new(…args:any[])=>T;
甲级{
a():任何{}
}
B类{
b():任何{}
}
// ...
函数fn(参数:数组<
类//引用此线程-以及以下代码-
type Class=new(…args:any[])=>T;
甲级{
a():任何{}
}
B类{
b():任何{}
}
类型ArgType=Class |[Class,keyof T]
类型ArgDefinition={
[K in keyof T]:ArgType[]
}
声明函数fn(arg:ArgDefinition):void
fn({a:[
A.
[A,'A'],//显示错误
B
[B,'B'],//显示错误
]})
类型X=ArgType
函数fn
中参数中对象中属性a
的推断类型为ArgType
引用此线程-以及以下代码-
type Class=new(…args:any[])=>T;
甲级{
a():任何{}
}
B类{
b():任何{}
}
类型ArgType=Class |[Class,keyof T]
类型ArgDefinition={
[K in keyof T]:ArgType[]
}
声明函数fn(arg:ArgDefinition):void
fn({a:[
A.
[A,'A'],//显示错误
B
[B,'B'],//显示错误
]})
类型X=ArgType
函数fn
中参数中对象中属性a
的推断类型为ArgType
首先,请确保编译器不会对数组进行变异,换句话说,它是一个元组。如果传入数组文字,则必须使用const断言(as const
)。一旦执行此操作,您将看到定义的类型不适合此任务:
类型“readonly[typeof A,readonly[typeof A,“A”]、typeof B、readonly[typeof B,“B”]]”是“readonly”,不能分配给可变类型(“类|[Class,never])[]
请注意,keyof T
被解析为never
,因为keyof unknown
是never
。为什么?因为签名接受一个可变的数组,而我们传递一个ReadonlyArray
。这很容易修复,但需要我们进行平方运算,因为T
被推断为元组:
函数fn(arg:ReadonlyArray<
类//首先,确保编译器不会对数组进行变异,换句话说,是一个元组。如果传入数组文本,则必须使用常量断言(as const
)。一旦执行此操作,您将看到定义的类型不适合此任务:
类型“readonly[typeof A,readonly[typeof A,“A”]、typeof B、readonly[typeof B,“B”]]”是“readonly”,不能分配给可变类型(“类|[Class,never])[]
请注意,keyof T
被解析为never
,因为keyof unknown
是never
。为什么?因为签名接受一个可变的数组,而我们传递一个ReadonlyArray
。这很容易修复,但需要我们进行平方运算,因为T
被推断为元组:
函数fn(arg:ReadonlyArray<
类//您能解释一下您尝试了什么以及在哪里发现了问题吗?我试图为T
提出一个索引结构。类似于T[I in keyof T]
,但它对我不起作用。你能解释一下你尝试了什么以及在哪里发现了问题吗?我试图为t
提出一个索引结构。类似于t[I in keyof t]
,但它对我不起作用。