Скажем, у меня есть интерфейс А, который выглядит так:
interface A {
prop1: string
prop2: string
}
Я инициализирую объект объект следующим образом:
const obj: Partial<A> = { prop1: 'xyz' }
Есть ли способ преобразовать объект в А и автоматически установить любые свойства, не определенные в объект, но требуемые в А, в null или undefined? Я хотел бы использовать только частичные значения при инициализации переменной, если это возможно, и придерживаться «полного» типа в параметрах функции.
Я не могу изменить А на класс.






Это довольно поздний ответ, но я оставлю его на случай, если кто-нибудь позже встретится.
Typescript - это все о типах, которые используются во время компиляции для проверки правильности кода, но удаляются во время выполнения, чтобы превратить код в простой JavaScript. Это означает, что невозможно добавить какие-либо свойства с помощью функций машинописного текста.
Однако вы можете определить функцию, которая принимает частичный объект и устанавливает свойства по умолчанию:
function complete(obj: Partial<A>): A {
return Object.assign({
prop1: 'default1',
prop2: 'default2'
}, obj);
}
const partial: Partial<A> = { prop1: 'xyz' }
const a: A = complete(partial)
console.info(a) // { prop1: 'xyz', prop2: 'default2' }
Если вы хотите установить для отсутствующих свойств значение undefined, та же функция будет работать, но вы не сможете преобразовать возвращенный объект в A, потому что A требует, чтобы все свойства были строками, а не null или undefined.