const createFruit = <T extends string[]>(fruits: T): typeof fruits[0] => fruits[0]
const fruit = createFruit(['apple', 'orange']) // fruit is of type `string`
我希望fruit
的类型被推断为字符串字面量apple
,难道没有办法做到吗?
const createFruit = <T extends string[]>(fruits: T): typeof fruits[0] => fruits[0]
const fruit = createFruit(['apple', 'orange']) // fruit is of type `string`
我希望fruit
的类型被推断为字符串字面量apple
,难道没有办法做到吗?
3条答案
按热度按时间ve7v8dk21#
对
fruits
参数使用variadic tuple语法将提示编译器推断文本类型。Playground
np8igboo2#
为了获得更强的类型化以提供所需的行为,只需将参数输入为不可变数组,然后使用
const
Assert输入作为参数传递的值:TypeScriptPlayground
j7dteeu83#
在TS
5.0
中,您将能够使用const
modifier on type parameters,如下所示:目前可能的解决方案如下:
其中声明了另一个类型参数
N
,以将推断范围从字符串缩小到实际的字符串类型文字,然后将T
的上限设置为T[] | []
,其中| []
告诉TS推断元组类型而不是数组类型。在这两种情况下,返回类型都可以是
T[0]
。