簡體   English   中英

聯合和交叉點類型的操作順序?

[英]Union and Intersection types order of operations?

我有一個想說的類型場景:

export interface ItemSchema {
  [attrName: string]:
    { type: 'number', default?: number, readOnly?: boolean} |
    { type: 'string', default?: string, readOnly?: boolean} |
    { type: 'boolean', default?: boolean, readOnly?: boolean} |
    { type: 'date', default?: Date, readOnly?: boolean} |
    { type: 'object', default?: object, readOnly?: boolean}
}

(因為我正在定義一個架構,該架構可在運行時用於以JSON格式fwiw傳遞數據,而這是該架構的接口)。

這很方便,因為在我的實際類型定義中,可以使用{ type: 'number', default: 2 }但不能使用{ type: 'number', default: 'potato' }

我想將readOnly位(以及為簡單起見在此省略的其他內容)拉到一個單獨的段中。 實際上,我可以在上述堆棧之前加上{ readOnly?: boolean } & ,並且似乎可以正常工作,但這取決於這些|的操作順序。 和&運算符的文檔不足(至少不在我能找到的地方)。

(從旁觀的角度來看,我也可以使用括號,例如{} & ({} | {} | {}) ,但這會使我的短毛貓大吃一驚,所以我不確定此處是否正式支持括號這只是一個意外)。

那么,是否有地方為這些接口組合運算符定義了操作順序? 我不想編寫僅由於編譯器中未記錄的怪癖而導致其運行在2.3或更高版本中的代碼。

您可以使用接口。

基本模式的一個接口:

interface Schema { readOnly?: boolean };

然后其他擴展它的人:

interface NumberSchema extends Schema { type: 'number', default?: number };
interface BooleanSchema extends Schema { type: 'boolean', default?: boolean };
interface StringSchema extends Schema { type: 'string', default?: string };
interface DateSchema extends Schema { type: 'date', default?: Date };
interface ObjectSchema extends Schema { type: 'object', default?: object };

那么地圖是:

interface ItemSchema {
    [attrName: string]: NumberSchema | BooleanSchema | StringSchema | DateSchema | ObjectSchema;
}

操場上的代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM