如何在Typescript类型检查期间引发类型错误

时间:2020-07-01 13:16:26

标签: typescript types typescript-typings

我有两种永不相交的类型。有没有办法在做类型检查器标志时这样做呢?理想情况下,我只想在类型世界中这样做而无需声明任何冗余变量。

示例:

type A = 1 | 2 // Must be different from B
type B_OK = 3
type B_FAIL = 2 | 3

// What I want (pseudo Typescript)
type AssertDifferent<X,Y> = Extract<X,Y> extends never ? any : fail // Fail if the types intersect

// Expected result (pseudo Typescript)
AssertDifferent<A,B_OK> // TS is happy
AssertDifferent<A,B_FAIL> // Fails type check

1 个答案:

答案 0 :(得分:1)

您最好的选择是使条件类型返回true或false,然后尝试将true分配给结果。像这样:

type A = 1 | 2 // Must be different from B
type B_OK = 3
type B_FAIL = 2 | 3

type AssertTrue<T extends true> = T;

type IsDifferent<X,Y> = Extract<X,Y> extends never ? true : false

type result1 = AssertTrue<IsDifferent<A, B_OK>>; // OK
type result2 = AssertTrue<IsDifferent<A, B_FAIL>>; // Error

您可以在第二行使用版本3.9中的新@ts-expect-error comments功能来强制执行该错误总是会抛出。