Tha*_*Fog 4 javascript arrays typescript keyof
我正在尝试实现类似于具有指定值类型的一个数组类型的克隆,作为具有返回指定值的函数的数组.
假设我们有数组元组:
[string, number]
Run Code Online (Sandbox Code Playgroud)
我想要的是从它获取生成的类型,如:
[() => string, () => number]
Run Code Online (Sandbox Code Playgroud)
我试过的是keyof使用类型别名:
type tupleTransform<T extends Array<any>> = { [U in keyof T ]: (() => T[U]) };
Run Code Online (Sandbox Code Playgroud)
它几乎可以工作,除了它还检查方法,Array如果我将:
const tupleTransformer: tupleTransform<[string, number]> = [() => 'a', () => 5]
Run Code Online (Sandbox Code Playgroud)
它会解雇我的错误,例如某些方法没有返回正确的类型
我想你可以这样做:
type TupleTransform<T extends any[]> = { [K in keyof T]:
K extends "length" ? T[K] :
K extends keyof any[] ? Array<() => T[number]>[K] :
() => T[K]
}
Run Code Online (Sandbox Code Playgroud)
它使用条件类型来区分数组方法和元组数字字符串索引.
让我们确保它有效:
const tupleTransformer: TupleTransform<[string, number]> = [() => 'a', () => 5] //okay
const t0: () => string = tupleTransformer[0]
const t1: () => number = tupleTransformer[1]
const len: 2 = tupleTransformer.length;
const mapped: (string | number)[] = tupleTransformer.map(x => x());
Run Code Online (Sandbox Code Playgroud)
看起来对我好.它可能会以某种微妙的方式与"真正的"元组不同,因此需要注意.希望有所帮助.祝好运!
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |