我想為KeyOfType<M, T>設定特定型別值的鍵創建一個型別。
interface MyTypeMap {
"one": 1;
"two": "hello";
"three": 3;
"four": "world";
"five": 5;
};
type KeyOfType<M, T> = ....; // ?????
type Foo = KeyOfType<MyTypeMap, string>; // 'two' | 'four'
type Bar = KeyOfType<MyTypeMap, number>; // 'one' | 'three' | 'five'
我試過如下,但它不起作用......
type KeyOfType<M extends {
[key in keyof M]: any;
}, T> = M extends {
[key in infer R]: T;
} ? R : never;
有沒有辦法解決這個問題?
uj5u.com熱心網友回復:
我會在這里使用鍵重映射,因為將鍵重映射到never會從結果型別中洗掉它:
type KeyOfType<M, T> = keyof {
[K in keyof M as M[K] extends T ? K : never]: K
};
這遍歷每個鍵K在M和值的檢查M[K]擴展T型。如果是,請保留密鑰,否則將密鑰名稱重新映射到never,將其洗掉。值型別無關緊要,因為您只需要鍵,所以直接推進K去似乎沒問題。然后keyof在開始時塞滿 a以拔出鑰匙。
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383510.html
標籤:打字稿
