Я пытаюсь создать простую программу машинописи,
который ограничивает объект, чтобы он соответствовал заданному типу данных интерфейса.
Например, у меня есть интерфейс Config
и объект схемы
Я хочу, чтобы abc.value
было ограничено как строка, а xyz.value
— как number
:
interface Config {
abc: string
xyz: number
}
const schema: XXX = {
abc: {
value: '',
},
xyz: {
value: 0,
},
}
Я пытался использовать ключевое слово infer
, но не смог заставить его работать должным образом.
const schema: Record<T extends keyof Config ? infer keyof Config : any, any> = {
abc: {
value: '',
},
xyz: {
value: 0,
},
}
что я делаю неправильно здесь? Любая помощь будет оценена
Спасибо.
Пожалуйста, используйте сопоставленные типы:
interface Config {
abc: string
xyz: number
}
type Mapped<T> = {
[Prop in keyof T]: {
value: T[Prop]
}
}
const schema: Mapped<Config> = {
abc: {
value: '2',
},
xyz: {
value: 0,
},
}
Спасибо! поэтому похоже, что работает только ключевое слово
type
, в то время какRecord
отменяет отношения. Хм интересно думал они одинаковые!