我想在條件型別檢查中區分以下函式型別:
type SyncFn = () => void;
type AsyncFn = (data: number) => Promise<void>;
type SyncFnWithArg = (data: number) => void;
因此,我可以使用 @Titian Cernicova-Dragomir 發布的KeyOfType
我還注意到,如果我修改AsyncFn并洗掉它的引數,那么我會遇到更多問題,因為現在的型別定義onlySyncFn不正確,因為現在它"f1" | "f2"不僅僅是"f1"在上面的第一個 TS Playground 中。
第二個TS游樂場
我想這與打字稿中函式多載的完成方式有關,但我真的不知道,所以這就是我尋求幫助的原因....也許它不相關,但我們能夠做到這樣的函式型別區分在TS?
uj5u.com熱心網友回復:
可以通過KeyOfType如下更改型別來解決該問題:
A extends B檢查型別關系(和)的兩個方向B extends A:- 將條件型別子句中使用的型別包裝在元組 (
[A] extends [B]) 中。
type KeyOfType<T, V> = keyof {
[P in keyof T as [T[P]] extends [V]
? [V] extends [T[P]]
? P
: never
: never
]: any
}
在這里找到一個游樂場示例,在這里找到一個關于測驗型別相等性的各種方法的有趣討論(每種方法都有自己的警告)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525199.html
