我想定义某种类型,它是其他类型的键。可以这样做
interface B {
x: something;
y: string;
z: something;
}
type keyOfB = keyof B;
export class A {
foo: keyOfB;
}
但同时我只想 foo 是某种类型,例如字符串或其他东西,如何组合它?
foo: keyOfB & type
不行。
从理论上讲,这是 Pick<> 或 Extract 的工作<>但我无法让它工作
https://www.typescriptlang.org/docs/handbook/utility-types.html
所以我修改了这里发布的答案 https://stackoverflow.com/a/53899815
对此,它似乎:)
type KeyOfType<T extends object, Type> = Exclude<{
[K in keyof T]: T[K] extends Type
? K
: never
}[keyof T], undefined>
用法:
interface B {
x: something;
y: string;
z: something;
}
export class A {
foo: KeyOfType<B, string>;
}
Foo prop 只允许分配字符串类型的 B 键。(在这种情况下只有"y"(