用于指示要在Typescript中设置特定类型值的键的类型



我想为设置特定类型值的键创建一个类型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;

有什么办法解决这个问题吗?

我会在这里使用密钥重映射,因为将密钥重映射到never会将其从生成的类型中删除:

type KeyOfType<M, T> = keyof {
[K in keyof M as M[K] extends T ? K : never]: K
};

这对M中的每个键K进行迭代,并且对值M[K]的检查扩展了T类型。如果是,请保留密钥,否则将密钥名称重新映射为never,然后将其删除。值类型无关紧要,因为您只需要密钥,所以将K推入其中似乎很好。然后在开始时塞一个keyof,只拔出钥匙。

游乐场

最新更新