今天,我使用TypeScript(v3.5.1)遇到了一个奇怪的案例,这让我感到困惑。我定义了一个带有可选属性的接口,但是TypeScript允许我在使用对象分解时将默认值设置为所需的值:
interface IFoo {
letter?: "a" | "b" | "c";
}
const foo: IFoo = {};
const { letter = 1 } = foo;
console.log(letter); // --> 1
// Type signature of `letter`: "a" | "b" | "c" | 1
// Why does TS modify the type to include 1?
在TypeScript操场上运行此代码。
通过某种类型检查,我注意到TypeScript正在将的预期签名修改"a" | "b" | "c"
为"a" | "b" | "c" | 1
。我期待,当我试图默认为得到一个类型的错误letter
来1
。我在这里想念什么吗?谢谢!
解构语句引入了一个新变量。除非已分配或在这种情况下推断出,否则它还没有类型。
查看向下编译的代码,这变得更加明显:
// const { letter = 1 } = foo;
var _a = foo.letter, letter = _a === void 0 ? 1 : _a;
或清理一下:
const letter = foo.letter === undefined ? 1 : foo.letter;
letter
要么foo.letter
或者1
如果前者是不确定的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句