I have an object with a key item
whose value type could be undefined | Box
. I have to initiate it as undefined
, and at a later time I'll substitute that value with a Box
.
const myObjs = {
"obj1" : {x: 0, y: 1, z: 3, item: undefined},
"obj2" : {x: 0, y: 1, z: 3, item: undefined}
};
This gives me the error
Object literal's property 'item' implicitly has an 'any' type.
So I created a custom type, but I cannot use it because the symbol :
is already in use in an object:
type boxType = undefined | Mesh;
const myObjs = {
"obj1" : {x: 0, y: 1, z: 3, item: boxType: undefined},
"obj2" : {x: 0, y: 1, z: 3, item: boxType: undefined}
};
How do I tell my object that item
should be of type boxType
?
CodePudding user response:
I would strongly suggest just typing everything:
type Mesh = any;
type ObjectType = {
x: number;
y: number;
z: number;
item?: Mesh; // Mesh or undefined
}
const myObjs: {[key: string]: ObjectType} = {
"obj1" : {x: 0, y: 1, z: 3},
"obj2" : {x: 0, y: 1, z: 3, item: undefined} // if you *really* need this
};
CodePudding user response:
This should be
const myObj = {x: 0, y: 1, z: 3, item: undefined as boxType };
CodePudding user response:
Either list out all the properties together
const myObj: {
x: number;
y: number;
z: number;
item: undefined | Mesh;
} = { x: 0, y: 1, z: 3, item: undefined };
or, more concisely but requiring an ugly type assertion, use as
after the item.
const myObj = {x: 0, y: 1, z: 3, item: undefined as undefined | Mesh };