Nox*_*Nox 18 type-inference typescript
我对此感到困惑,无法弄清楚如何在没有第二个功能的情况下做到这一点:
interface Fixed { a: number }
const fn = <A, B extends {} = {}>(b: B) => {
return b
}
fn({ a: 1 }) // { a: number }
fn<Fixed>({ a: 1 }) // {}
const fn2 = <A>() => <B extends {} = {}>(b: B) => {
return b
}
const result = fn2<Fixed>()({ a: 1 }) // { a: number }
Run Code Online (Sandbox Code Playgroud)
为什么如果我修复类型 A,Typescript 无法推断出 B 的类型?如果我返回一个函数,该函数又尝试推断 B 的类型,那么一切都会再次正常。
Mát*_*osi 21
类型推断基于全有或全无原则。在第一种情况下:
\nfn({ a: 1 })\nRun Code Online (Sandbox Code Playgroud)\n没有提供泛型类型参数,因此它将推断两者:
\nB{ a: number }将根据函数参数进行推断;A将被推断为unknown因为它没有在函数中的任何地方使用。在第二种情况下:
\nfn<Fixed>({ a: 1 })\nRun Code Online (Sandbox Code Playgroud)\n您已指定一种泛型类型,不幸的是,这意味着类型推断将不会用于其余类型参数\xe2\x80\x93 因此:
\nA被指定为Fixed;B未给出,因此不会推断它,而是默认为{}.尽管这很烦人,但这就是 TypeScript 的工作原理。您的第二个带有两个函数调用的示例是此问题的常见解决方法。
\nGitHub 上的相关问题。
\n| 归档时间: |
|
| 查看次数: |
6148 次 |
| 最近记录: |