gpt4 book ai didi

TypeScript:具有可选值的可区分联合

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

给定以下类型:

interface FullName {
fullName?: string
}

interface Name {
firstName: string
lastName: string
}

type Person = FullName | Name;

const p1: Person = {};
const p2: Person = { fullName: 'test' };
const p3: Person = { firstName: 'test' }; // Does not throw
const p4: Person = { badProp: true }; // Does throw, as badProp is not on FullName | Name;

我预计 p3 会导致编译器错误,因为 firstName 存在而没有 lastName,但它不会 - 是这是错误还是预期?

此外,使 FullName.fullName 成为必填项会导致 p3(和 p1)导致错误。

最佳答案

首先,您的界面 FullName 只包含一个可选属性,基本上是让它匹配任何东西。然后当你用它做联合类型时,生成的类型将与所有东西兼容。

但是,考虑声明和分配文字对象还有另一个问题,那就是您只能声明已知属性:Why am I getting an error "Object literal may only specify known properties"?

所以你可以毫无问题地做到这一点:

var test = { otherStuff: 23 };
const p4: Person = test;

但不是这个

const p4: Person = { otherStuff: 23 };

在您的情况下,firstNameFullName | 的已知属性名字,这样就ok了。

正如@artem 回答的那样,discriminated unions 在 typescript 中有特殊含义,除了常规联合之外,需要特殊的结构假设。

关于TypeScript:具有可选值的可区分联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41495369/

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