我有一个用户可以通过的对象,可以是任何类型的对象。在函数中,我检查一个道具,如果存在,我想将其返回:
if ('id' in payload) return payload.id
我已将payload
声明为object
。
但是TypeScript给了我错误:
[ts]类型'object'上不存在属性'id'。
任何
即使我只是检查了它是否存在 ...
有什么建议吗?
答案 0 :(得分:1)
in
运算符仅在变量为联合类型时才更改变量的类型(即充当类型保护)(它将变量的类型缩小为所有成员的联合)包含密钥)。
您可以将有效载荷类型声明为成员包含字段的联合:
let payload: object | { id: number };
if ('id' in payload) payload.id // ok now
或者您可以使用类型断言:
let payload: object;
if ('id' in payload) (payload as { id: number }).id // ok now
您也可以使用索引访问,但这仅在未将noImplicitAny
指定为编译器选项的情况下才有效。 (此选项可防止各种重要错误,因此我不会将其停用)
let payload: object;
if ('id' in payload) payload['id'] // ok if noImplicitAny is not specified
答案 1 :(得分:0)
这是我正在使用的TS函数
/**
* function to get value from dynamic object by property name if the property exists.
* (if the property does not exists it returns undefined)
*
* @param {object} obj [the object you want to check]
* @param {string} property [the name of the property you want to get the value from]
* @returns {any|undefined}
**/
let getValueByProperty = (obj: object, property: string): any => {
// initalize out as undefined;
let out: any;
// check if property exists
if(obj.hasOwnProperty(property){
// get value from object.property with an array like call
out = obj[property];
}
// return the value stored to out
return out;
}