1
是否可以根據特定條件指定多個可能的成員類型?例如,給予以下類型:基於其他成員類型的條件成員類型
interface DataItem {
value: boolean | Date | string | string[];
options: undefined | string[];
}
我想說明,如果:
value
是boolean
類型或Date
的那麼options
必須是undefined
類型。value
是string
型或string[]
的然後options
必須是string[]
類型。
有沒有辦法在當前版本的TypeScript(2.2)中指定上述約束?此外,如果是那麼我假設一個部件上添加型後衛應該適用於其他成員,即:
let data: DataItem;
if (typeof data.value === 'boolean') {
data.options = ['a']; // => Error Type 'string[]' is not assignable to type 'undefined'.
}
我嘗試以下,但沒有奏效:
interface BooleanOrDateItem {
value: boolean | Date;
}
interface StringOrStringArrayDataItem {
value: string | string[];
options: string[];
}
type DataItem = BooleanOrDateItem | StringOrStringArrayDataItem;
let data: DataItem;
if (typeof data.value === 'string') {
// I would expect this to work but the compiler complains
// => Property 'options' does not exist on type 'DataItem'.
// Property 'options' does not exist on type 'BooleanOrDateItem'.
data.options = ['a'];
}
明確鑄造StringOrStringArray
明顯作品
if (typeof data.value === 'string') {
(<StringOrStringArrayDataItem>data).options = ['a'];
}
但不應編譯器做的我的代表,因爲它有足夠的信息來推斷data
是StringOrStringArrayDataItem
?
我覺得這種方法是行不通的,我會使用'任何'數據類型或創建多個接口,並找出你需要使用工廠。 –