这段 typescript 的类型定义作用是什么?

type NoInfer<T> = [T][T extends any ? 0 : never]
阅读 517
1 个回答

在官方 5.4 增加 NoInfer 之前,可以使用这个类型避免传入的变量用于泛型推断。

function test<T>(a: T, b:(c: T)=>void){}

比如使用上面的这个函数时,传入的变量 a 和 函数 b 因为都包含了泛型 T,所以会共同作用于泛型 T 的推断。当 a 和 b 中的泛型不一致时会导致泛型 T 推断异常,比如 test(number, (string)=> void) 会导致 T 被推断为 never

function test<T>(a: T, b:(c: NoInfer<T>)=>void){}

使用 NoInfer 包装 b 函数的参数 c,意思是当推断泛型 T 时,不使用 b 的参数。使用上面的例子, test(number, (string)=> void) 会将泛型 T 推断为 number ,在函数 b 的参数位置会提示类型不匹配。

相关可以查看 ts 的官方发布文档。

https://devblogs.microsoft.com/typescript/announcing-typescri...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏