考虑这个代码片段:
type Foo = {
x: string;
y: number;
};
let a: Foo = {
x: "@",
y: 3,
};
let b: Partial<Foo> = { x: "#", y: undefined };
let c = { ...a, ...b };
Run Code Online (Sandbox Code Playgroud)
清楚地键入的c不能Foo因为属性y是undefined:运行时的值c是{x: "#", y: undefined}(至少在Chrome)。然而 Typescript 将c类型推断为{ x: string; y: number;}. 您可以在https://www.typescriptlang.org/play 中查看 4.0.5 版本。我糊涂了。
编辑:这是从评论到 github 问题的链接,问题完全相同https://github.com/microsoft/TypeScript/issues/13195#issuecomment-373178677。现在这就是答案。
主要问题是类型Partial<Foo>:
let b: Partial<Foo> = { x: "#", y: undefined };
Run Code Online (Sandbox Code Playgroud)
当您指定变量类型时,ts 编译器通常会忽略赋值的右侧,并且不会将其用于类型推断(有一些例外,但一般来说它是这样工作的)。
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |