繁体   English   中英

打字稿断言条件不会缩小已知联合类型

[英]Typescript assert condition not narrowing known union type

以下断言条件不会将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"])

游乐场链接: http://www.typescriptlang.org/play/#code/C4TwDgpgBAsiCqA7Alge0VAvFA3lA2gNYQgBcUAzsAE7KIDmAuuQIaIhQC+UAPpTXXr5GAbgBQYgGYBXRAGNgaDCwoUI1YAHkARgCsICgBQA3FgBtpEVuwCUrVeuAUopi9GTOASgdTUAJgA8VLQMADRQbCAAfLhiUPFQyJJQJuaWWJjYiNJmZrx8oJCoya7pAISZUABEqHoGwFX5UACC1NQsIAB0Hq3tIKluNjaxCaNQwAAW1KgA7lCIEHMAom2+hlXNDhpKUJIsyGYQflU24qOcYhdSsgo79BDAAGppEIZ2sAgo6CMJ1A-S1AweEkqFQ5Cq2hY1EanHEVzk6CoLheWCg9yeLze4jEKjUGh0+iMpQgpwkCMQFFQh06ZlQ9AGlnwVTA0zAADkWABbCBVRg2IA

似乎与: https : //github.com/microsoft/TypeScript/issues/37241有关

由于string[]{ [key: string]: any }的子类型,断言不能缩小范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM