Я хотел бы создать общую функцию, которая будет принимать объект, затем выполнять некоторые преобразования и возвращать новый объект с теми же ключами и разными значениями. Я пытаюсь сделать его «строго типизированным», чтобы каждый, кто его использует, имел преимущества TS, а несуществующие ключи должны выдавать ошибку.
Что у меня есть на данный момент:
const hash = {
"first": 1,
"second": 2,
"third": 3,
}
type Mapper<T> = {
[key in keyof T]: number
}
type Result<T>= {
[key in keyof T]: () => number
}
const transform = <T>(mapper: Mapper<T>) => {
const result = {} as Result<T>
(Object.keys(mapper) as (keyof T)[]).map(key => {
result[key] = () => mapper[key]
})
return result
}
type Hash = typeof hash
const a = transform<Hash>(hash)
a.first()
// a.fifth() OK error
Он работает хорошо, но я ищу решения, чтобы решить эту проблему:
Удалить утверждение типа
const result = {} as Result<T>
Удалите утверждение типа
(Object.keys(mapper) as (keyof T)[])
(или используйтеObject.entries
, но, похоже, в этом случае также требуется утверждение типа)
Могу ли я реализовать то же самое, но более «чистым» способом в Typescript?