可能是一个不好的问题,甚至是不可能的,但我一直在对这个问题bang撞了一段时间,无法解决。预先感谢!
T泛型创建连接类型:
const arrayToArray = <T>(values: T[]) => values;
当我使用该功能时:
const result = arrayToArray([1, 'hi', 3]);
它创建类型:
const result: (string | number)[]
我正在寻找它来创建:
const result: [number, string, number]
我希望'one'
和'three'
返回类型错误,因为它们不是数字。
const useResultType: typeof result = ['one', 'two', 'three'];
答案 0 :(得分:4)
要从数组文字中推断出元组,有两种方法可以说服编译器执行此操作:
在休息参数中使用元组。这从调用中删除了数组文字:
const arrayToArray = <T extends any[]>(...values: T) => values;
const result = arrayToArray(1, 'hi', 3); //[number, string, number]
使用元组和数组约束的并集向编译器提示您需要并集。这样可以将参数作为数组传递:
const arrayToArray = <T extends [any] | any[]>(values: T) => values;
const result = arrayToArray([1, 'hi', 3]); // [number, string, number]
或者如果您想要3.4中的只读元组(尚未发布),则可以直接使用as const
断言:
const result = [1, 'hi', 3] as const; // readonly [number, string, number]