Typescript 如何从一个枚举或者数组中 返回生成动态类型?

比如我有一个数组或者枚举

let Arr = ['Apple', 'Orange', 'Car']
// 或者
enum EnTest {
 Apple,
 Orange,
 Car
}

我想生成一个对象,这个对象包含这些方法 setApple, setOrange, setCar 等
举例:

function createObj(arr) {
 // 一系列处理
 return Obj
}
const obj = createObj(Arr)

// 这时 obj 可以调用以下方法
obj.setApple()
obj.setOrange()
obj.setCar()

我该如何去动态声明这个 obj 的类型呢

阅读 1.5k
1 个回答

upd: 首字母大写

type Test = ['apple', 'orange', 'car']

type SetterName<K extends string> = `set${Capitalize<K>}`

type WithSetters<T extends readonly string[]> = Record<
    SetterName<T[keyof T & number]>,
    () => void
> // Record 好看点

type TestWithSetters = WithSetters<Test>


type Test = ['Apple', 'Orange', 'Car']

type SetterName<K extends string> = `set${K}`

type WithSetters<T extends readonly string[]> = {
    [k in SetterName<T[keyof T & number]>]: () => void
}

type TestWithSetters = WithSetters<Test>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏