How to get around property does not exist on 'Object'
If you use the any
type instead of Object
, you can access any property without compile errors.
However, I would advise to create an interface that marks the possible properties for that object:
interface Options { selector?: string template?: string}
Since all of the fields use ?:
, it means that they might or might not be there. So this works:
function doStuff(o: Options) { //...}doStuff({}) // empty objectdoStuff({ selector: "foo" }) // just one of the possible propertiesdoStuff({ selector: "foo", template: "bar" }) // all props
If something comes from javascript, you can do something like this:
import isObject from 'lodash/isObject'const myOptions: Options = isObject(somethingFromJS) // if an object ? (somethingFromJS as Options) // cast it : {} // else create an empty objectdoStuff(myOptions) // this works now
Of course this solution only works as expected if you are only unsure about the presence of a property not of it's type.
If you don't want to change the type or create an interface, you can also use this syntax to access unknown properties:
selector ():string { return this.options["selector"];} template ():string { return this.options["template"];}