使用默认值和对象解构分配时的TypeScript类型修改

琼德姆

今天,我使用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我期待,当我试图默认为得到一个类型的错误letter1我在这里想念什么吗?谢谢!

斯宾塞公园

解构语句引入了一个新变量。除非已分配或在这种情况下推断出,否则它还没有类型。

查看向下编译的代码,这变得更加明显:

// 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何同时使 TypeScript 解构函数参数、分配默认值和可选的整个对象类型?

具有其自身默认值的对象解构分配

使用Typescript中的默认值解构属性

解构和设置嵌套默认值

解构多级并将默认值分配给第一级对象

在JS中解构时,嵌套的部分对象默认为默认值?

如何使用默认值解构具有空值的嵌套对象

Java循环属性和使用反射修改默认值

使用参数解构从构造函数默认值设置javascript对象属性

为通用类型分配默认值

用打字稿和默认值解构嵌套参数

使用setter和getter时如何打印类对象的默认值

解构分配和Typescript中的“选择”时,类型上的属性不存在

使用嵌套对象和默认值进行销毁

Typescript-在解构时修改数组值

MySQL数组类型和默认值

设置参数的默认值和类型

在 TypeScript 中,是否可以将 any 类型值转换为自定义类型并在该值不匹配时使用默认值?

是否可以在销毁另一个对象的同时分配一个对象(在销毁对象时使用默认值)

将默认值分配给重命名的解构变量

对默认变量使用解构分配和其余语法

如何使用 Typescript 对具有回退值的解构对象进行类型检查?

使用 Typescript 解构对象

使用默认值创建复合类型

使用Union类型设置默认值

当属性是 useContext 钩子的函数类型时,TypeScript 接口默认值

无法使用TypeScript导入默认值

为T:Float类型参数分配默认值

使用默认值键入对象参数