关于联合的错误类型断言

时间:2020-10-27 14:58:10

标签: typescript typescript-typings type-assertion

我不明白为什么在这个最小的可重现示例中类型断言不起作用。

这里是Playground Link

type Letter = "A" | "B"

type Useless = {}

type Container<T> =
    Useless |
    {
        type: "container"
        value: T
    }

function transform<X extends Letter, Y extends Letter>(container: Container<X | Y>): asserts container is Container<X> {
    // custom logic
}

let container: Container<"A" | "B"> = undefined as any

// Asserts no B
transform<"A", "B">(container)

container // Container<"A" | "B">
          // Container<"A"> when Useless is commented
          // I want Container<"A">

我希望容器 的类型为Container<"A">

当我完全删除类型 Useless 时,它会按预期工作。

当我用type Useless = { key: string }替换 Useless 类型时,我的容器的类型是 Useless 而不是Container<"A">

如何获取类型Container<"A">

1 个答案:

答案 0 :(得分:0)

实际上我不太确定为什么打字稿会出现问题,我假设T与无影响的泛型联合有时会使其崩溃

如果将其拆分,它将对我有用。我在这里假设drawnow 总是断言?

Useless

Playground