Tib*_*ssy 10 typescript typescript-compiler-api
我正在尝试使用 TypeScript 的 TypeChecker API 创建一个处理特定类型的工具。我需要唯一地标识特定类型——比如DomSanitizer来自@angular/platform-browser包的Angular 。我有以下代码来获取类型的完全限定名称
let type = typeChecker.getTypeAtLocation(node);
let fqn = typeChecker.getFullyQualifiedName(type.getSymbol());
Run Code Online (Sandbox Code Playgroud)
但是,这将返回包含node_modules目录绝对路径的名称,例如
"/home/user/project/node_modules/@angular/platform-browser/platform-browser".DomSanitizer
我想删除特定于项目的部分,只有类似@angular/plaform-browser/platform-browser.DomSanitizer. 我更喜欢使用 TypeScript API 而不是对这个值做一些字符串操作,因为我希望 API 更健壮。
如果你知道项目根目录是什么,你可以使用NodeJS 的path.relative方法来实现:
import * as path from 'path'
const type = typeChecker.getTypeAtLocation(node);
const fqn = typeChecker.getFullyQualifiedName(type.getSymbol());
const projectRoot = '/home/user/project/node_modules/'
const relativePath = path.relative(projectRoot, fqn)
console.log(relativePath) // should print @angular/plaform-browser/platform-browser.DomSanitizer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |