你能在TypeScript中回显一个类型吗?

o0lyfsai  于 2023-05-30  发布在  TypeScript
关注(0)|答案(1)|浏览(145)

据我所知,TypeScript中没有类似的东西:

type TypeA = { x: number };
printType(TypeA);

这是我发现的唯一一种方法,可以让TypeScript始终输出类型的描述。

const y = {
    x: 1,
    z: 'hello',
};

const z: never = y;

尝试赋值给never类型总是会打印一个错误,并且该错误会提到被赋值的值的类型。

Type '{ x: number; z: string; }' is not assignable to type 'never'.

这种方法是有限的,因为它需要一个真实的的变量。
真的没有别的办法了吗?

oknwwptz

oknwwptz1#

你不能在运行时这样做,因为TypeScript types are necessarily erased at runtime。因此,您只能在IDE中或作为编译过程的一部分执行此操作,然后TypeScript才能成为可运行的JavaScript。将此作为编译错误发出的解决方法是有效的,因为它发生在编译期间;没有办法使用官方的TS让它在运行时工作。
也就是说,tsserver的可用性使得许多IDE很容易集成类型信息。该页面还包括一些示例集成,尽管还有许多其他集成可用。其中最重要的是微软自己的Visual Studio Code,它提供了IntelliSense(弹出窗口,悬停和代码完成)和Inlay提示(内联呈现的参数和类型信息,就像显式编写的一样)。
最后,一个名为Twoslash的面向文档的语言扩展向IDE发出显式请求,以内联方式显示该类型。这与上面的镶嵌提示非常相似,但可以选择您指定的点。它在TypeScript Playground和extensions are available to add Twoslash support to VSCode中自动可用。

const a = { b: 3, c: "hello" };

console.log(a);
//          ^? [const a: { b: number, c: string }]

与playground链接中一样,方括号中的类型注解将自动添加和更新。

相关问题