功能参数类型取决于其他参数的类型

卢克

我正在尝试编写一个具有以下类型签名的函数:

  • 参数a是类型stringundefined
  • 参数bstringifa还是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'
    }
}

我必须在函数内部进行强制转换,还是可以说服打字稿来推断我的类型?

编辑:完整的示例:https://typescript-play.js.org/#code/GYVwdgxgLglg9mABAWwJ4DFzXmAPADUQFMAPKIsAEwGdFqoAnGMAc0QB9FxKjhmjKAPgAUAKEQTEAQwBcifABpxkgEZzCpclVrde-SogD8iMCGQqiDRHPpNWSgJSIA3sokxgiYVMQBCALz+XFR6YAJOrpJRiAD0MdKIMLQ+tsxsALSCiCooIPTSADbUcNlECamsbtEqAHTUAA4FMFDCAOStDgDcVQC+oj1AA

提香·切尔尼科娃·德拉戈米尔

Typescript不支持基于一个参数缩小参数。就编译器而言ab它们是独立a的,b即使条件类型在概念上将它们联系在一起,检查也不会影响类型

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章