[英]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.