首页 > 解决方案 > 将数组值约束到接口的键

问题描述

我试图将数组的值限制为接口的特定键:

interface Foo {
  bar: string;
  baz: number;
  foo: string;
}

type ExtractArrayOfKeys<T, K extends keyof T> = Pick<T, K>[];

const keyArray: ExtractArrayOfKeys<Foo, "bar" | "baz"> = ["bar", "baz"]; // Error: Type 'string' is not assignable to type 'Pick<Foo, "bar" | "baz">'

标签: typescript

解决方案


这可以使用Extract实用程序类型相对轻松地完成,例如

type AllFoo = keyof Foo
type BarBaz = Extract<keyof Foo, 'bar' | 'baz'>

const allFooOK: AllFoo[] = ['bar', 'baz', 'foo']
const allFooNotOK: AllFoo[] = ['bar', 'kek'] // Type '"kek"' is not assignable to type '"bar" | "baz" | "foo"'

const barBazOK: BarBaz[] = ['bar', 'baz']
const barBazNotOK: BarBaz[] = ['bar', 'foo'] // Type '"foo"' is not assignable to type '"bar" | "baz"'.

操场


推荐阅读