Typescript怎么让Interface 的值固定为某个Object的key?

const obj = {
  a: 1,
  b: 2,
 ...
}
interface types = {
  key: 'a' | 'b'
}

有没有快捷的方法获取object的key了?
类似于

interface types = {
  key: object.keys(obj) // 这种写法肯定是错的
}
阅读 3.7k
2 个回答

keyoftypeof 结合使用:

const obj = {
    a: 1,
    b: 2
};

interface T {
    key: keyof typeof obj;
}

const val: T = {
    key: 'c' // Error: 不能将类型 “"c"”分配给类型 “"a" | "b"”
}
新手上路,请多包涵

使用映射类型,关键词为 type,不是 interface:

const obj = {
    a: 1,
    b: 'str'
}

type GetObj = {
    [K in keyof typeof obj]: () => typeof obj[K]
}

// type GetObj = {
//     a: () => number;
//     b: () => string;
// }

使用 typeof 将值转化为类型,获取 obj 的类型
使用 keyof 获取 key 的类型
使用 in 进行遍历,获取每个单独的 key 放入 K 中,将其重新映射为函数类型
文档:TypeScript: Documentation - Mapped Types

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进