TypeScript 类型定义问题

问题

能否限制某个对象的key是在某个联合类型内?
比如

type A = 'a' | 'b' | 'c';
其实简单的实现也能想到,但是觉得并不是很好
type Obj = {
    a?: string;
    b?: string;
    c?: string;
}

在其他需要使用A类型的时候可以使用keyof Obj也不需要重复定义,这里想问问有没有比较好的实现;

阅读 1.7k
2 个回答
type A = 'a' | 'b' | 'c';

type Obj = {
    [key in A]?: string;
}

const o: Obj = {
    a: '1'
}

使用Record类型

type A = 'a' | 'b' | 'c';

const obj: Record<A, string> = {
  a: '1',
  b: '2',
  c: '3',
  d: 'asd' //  ts报错 不能将类型“{ a: string; b: string; c: string; d: string; }”分配给类型“Record<A, string>”。
  对象文字可以只指定已知属性,并且“d”不在类型“Record<A, string>”中
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进