[英]Partially specifying the type of a function type in Typescript?
我有一個用例,其中我有一堆必須滿足某些標准的函數,即:
string
和一個Array<K>
unknown
, any
等,因為它會覆蓋類型推斷本質上,我正在尋找一些魔法類型,如:
type MagicType<K> = (str: string, keys: Array<K>) => Promise<infer>;
以便這些函數進行類型檢查:並返回推斷類型:
const f1: MagicType<number> = async (str, keys) => {
return '42'
}
// expecting typeof f1 === (string, Array<number>) => Promise<string>
const f2: MagicType<number> = async (str, keys) => {
return keys.length;
}
// expecting typeof f2 === (string, Array<number>) => Promise<number>
// note lack of `async` keyword
const f_error2: MagicType<number> = (str, keys) => {
return keys.length;
}
// expecting to be a compilation error, since number is not Promise<unknown>
我的試驗和(僅)失敗可以在這里找到: TS-playground
任何幫助表示贊賞。 我知道這很可能是極端情況,但我想知道是否有可能。 非常感謝!
我看到兩個選項 og 處理這種情況:
const f1: MagicType<number, string> = async (str, keys) => '42'
type MagicType<K> = (str: string, keys: Array<K>) => Promise<any>;
const infer = <Cb extends MagicType<number>>(cb: Cb) => cb
const infered = infer(async (str, keys) => '42')
const result = infered('hello', [1, 2, 3]) // Promise<string>
請記住,一旦您為 in 中的函數提供了顯式類型MagicType<number>
:
const f1: MagicType<number> = async (str, keys) => {
return '42'
}
TypeScript 不做任何推理工作,它只使用MagicType<number>
。
考慮這個例子:
const arr: ReadonlyArray<string> = ['a', 'b'] as const;
您可能認為 TS 能夠弄清楚除了ReadonlyArray<string>
arr
也是['a','b']
,但事實並非如此。 數組arr
只是一個ReadonlyArray<string>
不再可能推斷數組元素的文字類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.