Seb*_*idt 6 typescript-compiler-api
我想合并 .dt.s 文件中的类声明以生成更清晰的公共 API。我被困在如何使用泛型类型参数来完成这项工作。假设我有:
class A1<T> { // Non-exported class I want to hide
data?: T;
}
export class B1 extends A1<string> {
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想把它变成:
export class B1 {
data?: string;
}
Run Code Online (Sandbox Code Playgroud)
我可以获取 的类型A1,然后复制其成员。A1但是如何获得使用string而不是的解析版本呢T?
作为参考,这是我当前的代码:
for (const heritageClause of node.heritageClauses) {
for (const type of heritageClause.types) {
if (isExported(type.modifiers)) {
exportedTypes.push(type);
} else {
const privateType = typeChecker.getTypeAtLocation(type);
if (privateType?.symbol?.members) {
privateType.symbol.members.forEach((definition, memberName) => {
if (!currentMembers || !currentMembers.has(memberName)) {
additionalMembers.push(...definition.declarations);
}
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
我相信您正在寻找的方法是TypeChecker#getTypeOfSymbolAtLocation(symbol, node)。
以下应该得到 的解析类型string | undefined:
// by the way, recommend renaming `type` to `typeNode` to avoid confusion
typeChecker.getTypeOfSymbolAtLocation(privateType.getProperties()[0], type);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1642 次 |
| 最近记录: |