gpt4 book ai didi

typescript 类型在使用联合类型的对象文字分配中丢失

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:42 26 4
gpt4 key购买 nike

我预计以下代码会出错,但对于 typescript 来说完全没问题,你能告诉我为什么吗?

export interface Type1 {
command: number;
}

export interface Type2 {
children: string;
}

export type UnionType = Type1 | Type2;

export const unionType: UnionType = {
command: 34234,
children: [{ foo: 'qwerty' }, { asdf: 'zxcv' }],
};

Here是链接。

最佳答案

typescript 当前does not have 精确类型的概念(对象字面量除外,我将在最后解释)。换句话说,某些接口(interface)的每个对象都可以有额外的属性(接口(interface)中不存在)。

因此这个对象:

{
command: 34234,
children: [{ foo: 'qwerty' }, { asdf: 'zxcv' }],
}

满足 Type1 接口(interface),因为它具有其所有属性 (command) 属性,但它也满足 Type2 接口(interface),因为它具有其所有属性(children)。

关于对象字面量的注释: typescript 确实只为对象文字实现了精确类型的概念:

export const unionType: Type1 = {
command: 34234,
children: [{ foo: 'qwerty' }, { asdf: 'zxcv' }], // oops, not allowed here
};

export const unionType: Type2 = {
command: 34234, // oops, not allowed here
children: [{ foo: 'qwerty' }, { asdf: 'zxcv' }],
};

上面是演示对象字面量的代码,下面是没有它们的代码:

const someVar = {
command: 34234,
children: [{ foo: 'qwerty' }, { asdf: 'zxcv' }]
};

const: Type1 = someVar // ok, because assigning not an object literal but a variable

关于 typescript 类型在使用联合类型的对象文字分配中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53880821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com