Trí*_*han 8 javascript typescript
考虑我有以下类型:
type SomeType = {
propOne: any;
propTwo: any;
propThree: any;
}
Run Code Online (Sandbox Code Playgroud)
是propOne必需的,propTwo并且propThree是可选的,但至少其中之一是必需的。如何定义具有该约束的类型?
// The following code is my expectation
let someVar1: SomeType = { propOne: 1, propTwo: "two" } //Okay
let someVar2: SomeType = { propOne: 1, propThree: "three" } //Okay
let someVar3: SomeType = { propOne: 1, propTwo: "two", propThree: "three" } //Okay
let someVar4: SomeType = { propOne: 1 } //Not Okay
Run Code Online (Sandbox Code Playgroud)
art*_*pse 15
You can use the same trick even after your edit:
type SomeType = {
propOne: number;
propTwo?: string;
propThree?: string;
} & ({
propTwo: string;
} | {
propThree: string;
})
let someVar1: SomeType = { propOne: 1, propTwo: "two" } //Okay
let someVar2: SomeType = { propOne: 1, propThree: "three" } //Okay
let someVar3: SomeType = { propOne: 1, propTwo: "two", propThree: "three" } //Okay
let someVar4: SomeType = { propOne: 1 } //Not Okay
function f(s: SomeType) {
let p1 = s.propOne; // number
let p2 = s.propTwo; // string | undefined
let p3 = s.propThree; // string | undefined
}
Run Code Online (Sandbox Code Playgroud)
It forces you to have at least one property at declaration time, and it allows you to use both properties of the type when using objects of that type.
| 归档时间: |
|
| 查看次数: |
11629 次 |
| 最近记录: |