typescript - TypeScript Compiler API:如何在没有绝对路径的情况下获取类型的完全限定名称?
问题描述
我正在尝试使用 TypeScript 的 TypeChecker API 创建一个处理特定类型的工具。我需要唯一标识特定类型——比如包中的DomSanitizer
Angular @angular/platform-browser
。我有以下代码来获取类型的完全限定名称
let type = typeChecker.getTypeAtLocation(node);
let fqn = typeChecker.getFullyQualifiedName(type.getSymbol());
但是,这会返回包含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
推荐阅读
- excel - 如何复制最后一行数据的范围并粘贴到它下面的行中
- java - Spring security:拒绝访问处理程序不起作用(xml配置+控制器方法上的预授权注释)
- c# - 无法使用锁在多线程上下文中实现数据解析
- c# - ASP.NET:从 System.Web.Caching.Cache 迁移到 Redis
- python - Openpyxl - 如何解锁工作表中的所有单元格
- yaml - 在 circleci 上构建错误(启动环境)
- python - Jupyter Lab - dask-labextension 不工作
- replace - 将 Ant 属性文件中属性的值复制到另一个属性
- java - Jackson 从对象映射中反序列化枚举
- java - 如何在 Spring 中将 OrderBy 与 findAll 一起使用