打字稿结合类型“ keyof X”和SomeType

时间:2019-06-06 07:50:50

标签: typescript

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

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

1 个答案:

答案 0 :(得分:0)

所以我修改了这里发布的答案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')