作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类型:
type Foo = {
a: boolean;
b: string;
c: string;
}
如果 a
为 true
,如何调整它,必须提供 b 和 c
字段。但是,如果 a
是 false 或 undefined
,那么一定不能提供 b
和 c
吗?
最佳答案
您可以使用 discriminated union ,但要注意:
一般来说,阻止对象通过 TypeScript 的类型系统拥有属性是有问题的,因为对象可能有多余的属性。 TypeScript 会阻止分配定义过多属性的对象字面量,因为这是一个常见的编程错误,但在一般情况下也不会禁止。
如果 a
是可选的,意味着 b
或 c
不应该在那里,{}
(一个完全空的对象)是一个有效的 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
关于javascript - 如果 "a"属性为真,则还需要 "b"和 "c",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74705345/
我是一名优秀的程序员,十分优秀!