в последнее время я пытаюсь создать объект-заполнитель, который я смогу использовать с машинописным текстом. Идея состоит в том, чтобы иметь пустой объект и две функции:
- одну для добавления нового ключа к объекту-заполнителю с другим объектом в качестве значения (функция 'add')
- и одну для получить это значение, передав ключ, который уже существует в заполнителе (функция 'get')
Я хотел бы, чтобы машинописный текст запретил вводить ключи, которые уже существуют в заполнителе в функции 'добавить'. Также я хотел бы получать предложения при вводе клавиши в функции «получить». Последнее, чего я хотел бы достичь, - это иметь тип объекта, который возвращается из функции 'get' вместо 'any' или 'object'.
Вот пример кода с некоторыми базовыми c типами :
let placeholder = {}
function add(key: string, test: object) {
placeholder[ key ] = test
}
function get(key: string ) {
return placeholder[key]
}
add('test1', { val: 1 }) // here 'test1' is ok
add('test1', { val: 2 }) // here 'test1' should rise an error
let t1 = get('') // here 'test1' and should be suggested
t1.val // here t1 should have type { val: number }
До сих пор я пробовал использовать типы generi c с такими вещами, как:
function add( key: Omit< string, keyof typeof placeholder >, test: object ) { ... } // it is casting key to properties of string
function get< Key extends keyof typeof placeholder > ( key: Key ) { ... } // it only works with static keys