【问题标题】:Typescript assert condition not narrowing known union type打字稿断言条件不缩小已知联合类型
【发布时间】:2020-04-02 22:01:53
【问题描述】:

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

【问题讨论】:

  • 是的。这绝对是一个错误!

标签: typescript


【解决方案1】:

由于string[]{ [key: string]: any } 的子类型,因此断言无法缩小范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2022-01-05
    相关资源
    最近更新 更多