首页 > 解决方案 > TypeScript Compiler API:如何在没有绝对路径的情况下获取类型的完全限定名称?

问题描述

我正在尝试使用 TypeScript 的 TypeChecker API 创建一个处理特定类型的工具。我需要唯一标识特定类型——比如包中的DomSanitizerAngular @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 更健壮。

标签: typescripttypescript-compiler-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

推荐阅读