用于返回类型索引的通用数组

时间:2019-02-20 23:43:14

标签: typescript typescript-generics

可能是一个不好的问题,甚至是不可能的,但我一直在对这个问题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'];

1 个答案:

答案 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]