gpt4 book ai didi

javascript - 如果 "a"属性为真,则还需要 "b"和 "c"

转载 作者:行者123 更新时间:2023-12-05 03:16:19 25 4
gpt4 key购买 nike

我有一个类型:

type Foo = {
a: boolean;
b: string;
c: string;
}

如果 atrue,如何调整它,必须提供 b 和 c 字段。但是,如果 afalse 或 undefined,那么一定不能提供 bc 吗?

最佳答案

您可以使用 discriminated union ,但要注意:

  1. 一般来说,阻止对象通过 TypeScript 的类型系统拥有属性是有问题的,因为对象可能有多余的属性。 TypeScript 会阻止分配定义过多属性的对象字面量,因为这是一个常见的编程错误,但在一般情况下也不会禁止。

  2. 如果 a是可选的,意味着 bc不应该在那里,{} (一个完全空的对象)是一个有效的 Foo .

type Foo =
| {
a: true;
b: string;
c: string;
}
| {
a?: false;
};

// Valid
const a: Foo = { a: true, b: "bee", c: "see" };

// Valid
const b: Foo = { a: false };

// Valid
const c: Foo = {};

// Invalid, but only if you're directly assigning an object literal
const d: Foo = { a: false, b: "whatever" };

// This is allowed, because an object can have excess properties
const someObject = { a: false, b: "whatever" } as const;
const e: Foo = someObject; // <== No error

Playground link

关于javascript - 如果 "a"属性为真,则还需要 "b"和 "c",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74705345/

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