如何通过接口的键值类型选择键?

时间:2019-09-09 22:27:49

标签: typescript

假设此代码:

const add = <T, S>(prop: keyof T, item: S) =>
  setEntity({
    ...input,
    [prop]: [...(input[prop] || []), item]
  })

keyof T的类型应该是T的类型,而不是接受prop的任何键,T的类型应该只选择其值可分配给{{1} }。

有可能吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

type S = string | number;

interface T {
  foo: string;
  bar: boolean;
  baz: number;
  something: object;
}

type Assignable<Obj, Item> = {
  [Key in keyof Obj]: Obj[Key] extends Item ? Key : never
}[keyof Obj];

type Example = Assignable<T, S>; // "foo" | "baz"

TypeScript Playground