Я хочу объединить объявления классов в файл .dt.s, чтобы создать более чистый общедоступный API. Я застрял в том, как заставить эту работу работать с аргументами универсального типа. Допустим, у меня есть:
class A1<T> { // Non-exported class I want to hide
data?: T;
}
export class B1 extends A1<string> {
}
В идеале я хочу превратить это в:
export class B1 {
data?: string;
}
Я могу получить тип 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);
}
}
});
}
}
}