簡體   English   中英

文字類型推斷 - Typescript

[英]Literal Type inference - Typescript

考慮到這個定義:

interface Domain<Model, Name extends string> {
  name: Name;
  edit(cb: (m: Model) => Model): Domain<Model, Name>;
}

declare function createDomain<
  M extends { [key: string]: any } = {},
  N extends string = string
>(name: N): Domain<M, N>;

IDE 能夠給你正確的檢查(如圖所示): 在此處輸入圖片說明 這是因為打字稿能夠將'foo'推斷為extends N /* string */文字類型。

如果我為通用M提供簽名,則打字稿會丟失有關'foo'的信息並返回通用string 在此處輸入圖片說明

如何更改上述定義以保留有關N的信息?

我看到這些選項:

提供第二種

let domain = createDomain<Todo, "foo">("foo");

建廠

function funcCreateDomain<M>() {
    return <N extends string>(name: N) => createDomain<M, N>(name);
}

let factory = funcCreateDomain<Todo>();
let domain = factory("foo");

暫無
暫無

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

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