以下声明条件没有将value
类型缩小为{ [key: string]: any}
。如何实现?
type MyUnion = { [key: string]: any } | string[];
function assertObject(value: any): asserts value is Record<string, any> {
if (value === null || typeof value !== "object" || Array.isArray(value)) {
throw new Error("Assertion failed");
}
}
function getValue(): MyUnion {
return { foo: "bar" };
}
const value = getValue();
assertObject(value);
// Error as it does not know if it is a string[] or { [key: string]: any }
console.log(value["propName"])
有关
答案 0 :(得分:0)
由于string[]
是{ [key: string]: any }
的子类型,因此断言无法缩小其范围。