如何引用类型并确保Typescript编译器不会剥离导入

时间:2020-07-28 09:02:28

标签: typescript-compiler-api

我正在编写一个ts转换器,该转换器找到命名的类装饰器,然后替换装饰器的调用,并传递带有装饰类的所有道具名称和类型的地图,例如:

源文件:

import BigNumber from "bignumber.js";

@decorator()
class AClass {
   aProp: BigNumber;
}

输出:

import BigNumber from "bignumber.js";

@decorator({"aProp": BigNumber})
class AClass {
   aProp: BigNumber;
}

我从PropertyDeclaration获取道具名称和类型:

const clazzProps = [];
for (const childNode of clazz.members) {
    if (ts.isPropertyDeclaration(childNode)) {
       const type = typeChecker.getTypeAtLocation(childNode);
       if (type.isClass()) {
           clazzProps.push(ts.createPropertyAssignment(
              ts.createIdentifier(childNode.name.getText()),
              childNode.type.typeName
           );
       }
    }
}

到目前为止,还不错,但是从输出js文件中删除了import语句后,导致源文件BigNumber仅被引用为类型,而不是值。 我的问题是,如何正确检查BigNumber是否仅是一种类型,并确保导入不会被剥离?

0 个答案:

没有答案