我正在尝试编写一个具有以下类型签名的函数:
a
是类型string
或undefined
b
是string
ifa
还是a string
,否则它是anumber
到目前为止,我的方法是:
function myFunction<X extends string | undefined>(
a: X,
b: X extends undefined ? number : string,
) {
// ... do stuff ...
}
呼叫myFunction
按预期方式工作,即。myFunction('a', 'b')
在myFunction(undefined, 'b')
抛出错误的同时工作。但是,当我尝试使用函数体中的参数时,我没有任何键入支持:
function myFunction<...>(...) {
if (a !== undefined) {
// a is a string -> b must also be a string
b.split(''); // -> Property 'split' does not exist on type 'X'
}
}
我必须在函数内部进行强制转换,还是可以说服打字稿来推断我的类型?
Typescript不支持基于一个参数缩小参数。就编译器而言a
,b
它们是独立a
的,b
即使条件类型在概念上将它们联系在一起,检查也不会影响类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句