在我使用的集成开发环境(VSCode和TypeScript Playground),我将指针悬停在我想要捕获类型的值上。这会显示IntelliSense快速信息,描述该类型,您可以复制并粘贴它。
对于...
const todo = { name: "Learn Some TS", isDone: true }
提供的信息看起来像这样
可以复制、粘贴和修改,以便为您提供。
interface TodoInterface {
name: string;
isDone: boolean;
}
补充屏幕截图演示:
![Screen capture of copy/pasting IntelliSense quick info](https://istack.dev59.com/EG2VA.gif)
请注意,编译器选项可能会截断长类型。例如,假设您有以下类型:
type SomeFiltered<T extends any[]> =
T extends [infer F, ...infer R] ? [F, ...SomeFiltered<R>] | SomeFiltered<R> : []
它接受一个
元组类型,并生成其所有可能过滤版本的
联合类型。由于每个元素可以存在或不存在,因此您最终将元素的元组转换为 2
元组的联合类型。这是很多的。因此,这个……
type LongType = SomeFiltered<["A", "B", "C", "D", "E"]>
可以预计将有32个工会成员。使用默认编译器选项,您将无法在智能感知中看到完整的类型:
/*
type LongType = [] | ["A", "B", "C", "D", "E"] | ["B", "C", "D", "E"] | ["C", "D", "E"] |
["D", "E"] | ["E"] | ["D"] | ["C"] | ["C", "E"] | ["C", "D"] | ["B"] | ["B", "D", "E"] |
["B", "E"] | ... 18 more ... | [...]
*/
看到
... 18 more ...
和
[...]
的截断。
您可以通过启用
--noErrorTruncation
编译器标志 来禁用此类截断。(这个名字有点不太好,因为它不仅在错误消息中,而且在任何地方都会抑制显示的类型名称的截断。)然后您会得到这个:
/* with
type LongType = ["A", "B", "C", "D", "E"] | ["B", "C", "D", "E"] | ["C", "D", "E"] |
["D", "E"] | ["E"] | [] | ["D"] | ["C", "E"] | ["C"] | ["C", "D"] | ["B", "D", "E"] |
["B", "E"] | ["B"] | ["B", "D"] | ["B", "C", "E"] | ["B", "C"] | ["B", "C", "D"] |
["A", "C", "D", "E"] | ["A", "D", "E"] | ["A", "E"] | ["A"] | ["A", "D"] |
["A", "C", "E"] | ["A", "C"] | ["A", "C", "D"] | ["A", "B", "D", "E"] |
["A", "B", "E"] | ["A", "B"] | ["A", "B", "D"] | ["A", "B", "C", "E"] |
["A", "B", "C"] | ["A", "B", "C", "D"]
*/
代码操场链接
todo
上(例如,VS code会显示此信息),然后就可以看到const todo: { name: string; isDone: boolean; }
的内容,然后我就可以将其复制粘贴。不确定这是否可以算作“自动”,如果可以的话,我可以撰写一个答案。 - jcalz