寻求可获取TypeScript预定义全局的官方API或第三方库
获取TypeScript预定义全局/构造的字符串列表
用TypeScript自身API直接提取
安装typescript包后,在JS环境中可通过官方API拿到预定义类型的字符串列表,无需手动解析声明文件:
- 全局构造/类型:创建临时程序和类型检查器,提取全局作用域的符号名:
结果包含const ts = require('typescript'); // 创建空程序实例 const program = ts.createProgram([], { target: ts.ScriptTarget.Latest }); const checker = program.getTypeChecker(); // 获取全局作用域的所有符号 const globalSymbols = checker.getSymbolsInScope( ts.createSourceFile('temp.ts', '', ts.ScriptTarget.Latest), ts.SymbolFlags.Global ); // 过滤内部下划线开头的符号,得到全局类型/构造名列表 const globalTypeNames = globalSymbols.map(sym => sym.name).filter(name => !name.startsWith('_'));Uint32ArrayConstructor、Array、Promise这类全局构造和类型。 - 工具类型:TypeScript 4.5+提供了直接获取工具类型名的方法:
结果包含const utilityTypeNames = ts.getPredefinedTypeNames();Pick、Omit、Partial、Record等所有官方工具类型。
用第三方库快速获取
如果不想编写API逻辑,现成的库可直接提供整理好的字符串列表:
ts-builtin-types:预打包了所有TypeScript内置全局类型、工具类型的数组,直接导入即可使用:const { globalTypes, utilityTypes } = require('ts-builtin-types');@typescript-eslint/utils:与ESLint生态兼容,适合为eslint-plugin-jsdoc配置的场景,可通过其类型元数据提取相关列表。
关于T这类类型参数
这类属于TypeScript语法的类型占位符,没有官方集中列表。可手动维护常用参数名(如T、U、K、V等),加入到ESLint规则的允许列表。
适配eslint-plugin-jsdoc的no-undefined-types规则
将上述获取到的字符串列表,添加到规则的definedTypes配置项中,即可避免将TypeScript预定义构造/类型标记为未定义:
// .eslintrc.js module.exports = { rules: { 'jsdoc/no-undefined-types': [ 'error', { definedTypes: [ 'Uint32ArrayConstructor', 'Pick', 'T', // 补充其他获取到的类型名 ] } ] } };
内容的提问来源于stack exchange,提问作者Brett Zamir
相关产品推荐
相关产品推荐

