Typescript 组合类型 "keyof X" & SomeType



我想定义某种类型,它是其他类型的键。可以这样做

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"(

最新更新