断言类型不存在

时间:2019-11-09 11:04:49

标签: typescript

如何测试/断言Typescript中的变量类型不是“ any”?

我不需要运行时检查,如果编译器收到检测到此错误的错误就足够了:

function notAny(x: (rejects type any)) { ...}
let foo: any = 'value'

// tsc should throw an error here
notAny(foo)

解决方案应该只检查一次,而不是整个项目(例如使用--noImplicitAny

1 个答案:

答案 0 :(得分:2)

下面的代码应该可以工作。基本思想是any是唯一的类型,同时是unknown的基本类型和{}底部(空)类型的

type IsAny<T> =
  unknown extends T ? T extends {} ? T : never : never;

type NotAny<T> =
  T extends IsAny<T> ? never : T;

function notAny<T>(x: NotAny<T>) { }
let foo: any = 'value'

notAny(foo); // error as expected

Typescript Playground Link