我的型別如下所示:
type MyType = {
a: string;
b: string;
c?: number;
d?: string;
}
這種型別的物件看起來像:
const myObj1: MyType = { a, b };
const myObj2: MyType = { a, b, c, d };
所以如果一個物件MyType有屬性c,它肯定也有屬性d。有沒有辦法定義這種型別,這樣我就不必非空斷言或檢查這兩種型別,而不是將型別擴展到不同的型別?
uj5u.com熱心網友回復:
如果您被允許更改MyType,一種方法是將c和d屬性分隔到需要它們的不同物件中,并與該物件的交集交替。
type AB = {
a: string;
b: string;
};
type MyType = AB | AB & {
c: number;
d: string;
}
這樣,如果看到 MyType 的某些內容具有c屬性,TypeScript 將看到它肯定也具有d屬性。
uj5u.com熱心網友回復:
如果您希望僅在定義“c”時才存在屬性“d”,反之亦然,則值得使用extended介面并覆寫可選屬性,never如下所示:
type Base = {
a: string;
b: string;
c?: number;
d?: string;
}
interface Concrete1 extends Base {
c?: never;
d?: never;
}
interface Concrete2 extends Base {
c: number;
d: string;
}
type MyType = Concrete1 | Concrete2;
const myObj1: MyType = { a: 'a', b: 'b' }; ??
const myObj2: MyType = { a: 'a', b: 'b', c: 2 }; ?
const myObj3: MyType = { a: 'a', b: 'b', c: 2, d: 'd' }; ??
這將確保一個物件MyType總是包含其中一個a, b或a,b,c,d屬性。
鏈接到操場。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/476038.html
標籤:打字稿
