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

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 更健壮。

Mat*_*hew 1

如果你知道项目根目录是什么,你可以使用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)