Скажите, у меня есть следующий интерфейс:
interface Example {
optionalString?: string
// ... other props
}
И у меня есть функция, принимающая Example
в качестве параметра. Я знаю, что синтаксис возвращаемого типа фальшивый.
function ensureDefined (example : Example) : Example & {optionalString: string}
Идея этой функции состоит в том, чтобы убедиться, что свойство optionalString
из example
определено и этот объект возвращен. В этом случае каждый раз, когда я хочу получить доступ к свойству optionalString
, мне не нужно делать if(example.optionalString){}
.
Я попытался создать расширение интерфейса следующим образом:
interface ExampleExtension extends Example {
optionalString: string // notice no '?'
// ... other props
}
Но тогда этот нельзя назначить обратно переменной с типом базового интерфейса.
Я это слишком усложняю? Нужно ли мне иметь две отдельные переменные двух разных типов?