我正在编写一个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是否仅是一种类型,并确保导入不会被剥离?