I need props to be an object that is optional.
interface MyObject { id: string| number, name: string, namePlural: string}
interface Props { preloadInputs?: MyObject}
... // check if preloadInputs is not empty:
onMounted(() => {if (!(Object.keys(props.preloadInputs).length === 0)) {...} })
VSCode's error for the props.preloadInputs is:
I get an error:
No overload matches this call Overload 1 of 2, ' (o: {}): string[]', gave the following error. Overload 2 of 2, ' (o: object): string[]', gave the following error.ts (2769)
I am new to Vue and TS, so there must be something I am missing.
CodePudding user response:
You defined preloadInputs to be optional so it can have a value of undefined. Object.keys() does not accept undefined as the argument. That's why you get the error Type 'undefined' is not assignable to type '{}'.
We could use the nullish coalescing operator to solve this problem.
Object.keys(props.preloadInputs ?? {}).length === 0
If props.preloadInputs is undefined, an empty object gets passed to Object.keys().
