TypeScript窄泛型函数

时间:2019-03-06 09:54:06

标签: typescript

假设我们有一个通用函数

function hi<T>(name: T) { }
hi('Alex')
hi('Jim')

我想创建一个新函数,该函数将限制泛型类型,并且只允许Alex作为name。类似于下面的伪代码

function hiAlex = hi<'Alex'>
hiAlex('Alex') // works well
hiAlex('Jim')  // ERROR wrong name type

2 个答案:

答案 0 :(得分:3)

不幸的是,没有专用的语法。我们能做的最好的就是重复签名,因为它将通过调用实例化:

function hi<T>(name: T) { }
const hiAlex: (name: "Alex") => void = hi;

hiAlex('Alex') // works well
hiAlex('Jim')  // ERROR wrong name type

答案 1 :(得分:1)

function hi<T>(name: T extends string ? 'Alex' : T) { }
hi('Alex')
hi('Jim') // Argument of type '"Jim"' is not assignable to parameter of type '"Alex"'

如果我正确理解了您的问题,类似的事情应该可以解决。

或者只是不要使其通用:

function hi(name: 'Alex') { }

function hi<T>(name: 'Alex') { }