[英]Typescript generics return type issues
我在我的項目中使用 typescript generics 但它似乎效果不佳。
例子:
interface Test<T, P> {
a?: (v: T) => P
b?: (v: P) => void
}
const fn1 = <T, P>(_config: Test<T, P>) => {}
fn1({
a: (p) => 1,
b: (p) => {},
})
我認為params 'a'
類型就像:
Test<unknown, number>.a?: ((v: unknown) => number) | undefined
但實際上:
Test<unknown, unknown>.a?: ((v: unknown) => unknown) | undefined
我不知道為什么,有人可以幫助我嗎? 謝謝。
由於您沒有在此行定義類型: b: (p) => {}
然后 TS 無法推斷 P 的類型,即使您在上述a
的定義中返回它。
這是因為在聯合中,未知吸收了一切。
對於 (a) 中的 P,TypeScript 推斷出一種“數字”,但是對於 (b) 中的 P,它推斷出一種“未知”,就像它對於 (a) 中的 T 所做的那樣。
因此,P 會導致“數字 | 未知”(不是您預期的“數字 | 未定義”),這只會導致“未知”。
如果您在此處參考 TypeScript 文檔,您會發現:
// 在聯合中,未知數吸收一切
P 型 = 未知 | 數字; // 未知
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.