假设我们有一个通用函数
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
答案 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') { }