Ответ 1
Если вы используете тип any
вместо Object
, вы можете получить доступ к любому свойству без ошибок компиляции.
Однако я бы посоветовал создать интерфейс, который отмечает возможные свойства для этого объекта:
interface Options {
selector?: string
template?: string
}
Поскольку все поля используют ?:
, это означает, что они могут быть или не быть там. Итак, это работает:
function doStuff(o: Options) {
//...
}
doStuff({}) // empty object
doStuff({ selector: "foo" }) // just one of the possible properties
doStuff({ selector: "foo", template: "bar" }) // all props
Если что-то приходит из javascript, вы можете сделать что-то вроде этого:
import isObject from 'lodash/isObject'
const myOptions: Options = isObject(somethingFromJS) // if an object
? (<Options> somethingFromJS) // cast it
: {} // else create an empty object
doStuff(myOptions) // this works now
Конечно, это решение работает только так, как ожидалось, если вы только не уверены в наличии свойства, а не его типа.