簡體   English   中英

打字稿推斷類型參數

[英]Typescript infer type parameter

我想根據另一個屬性的值限制一個對象屬性的類型:

type DataType = "string"|"number"|"date";

type DataTypeMapping = {
    "string": string;
    "number": number;
    "date": string;
}

interface LinkedTypesSample <T extends DataType> {
    typ: T;
    value: DataTypeMapping[T];
}

現在我可以像這樣創建類型檢查對象:

const stringInstance: LinkedTypesSample<"string"> = {
    typ: "string",
    value: "abc"
}

const numberInstance: LinkedTypesSample<"number"> = {
    typ: "number",
    value: 1
}

問題是 - 是否可以跳過LinkedTypesSample類型參數? 看起來類型參數可能是從typ推斷出來的。

我試圖指定(天真)默認類型參數,如下所示:

interface LinkedTypesSample <T extends DataType = DataType> {
    typ: T;
    value: DataTypeMapping[T];
}

但在這種情況下,類型檢查停止工作。

操場

編輯:理想情況下,我根本不希望“LinkedTypesSample”公開類型參數。 我只想表達一個簡單的想法:根據另一個屬性的值或類型,一個屬性必須具有某種類型。

您可以嘗試分配條件類型 基本上分兩步創建類型:

type MapType<U> = U extends DataType ? {
    typ: U,
    value: DataTypeMapping[U]
 } : never;

type LinkedTypesSample = MapType<DataType>;

// works
const stringInstance: LinkedTypesSample = {
    typ: "string",
    value: "abc"
}

const numberInstance: LinkedTypesSample = {
    typ: "number",
    value: 1
}

// error
const stringInstance2:  LinkedTypesSample = {
    typ: 'string',
    value: 1
}

操場

暫無
暫無

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

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