TypeScript compiler API får typen af mapperet egenskab


Givet type Mapping=Record<'success' | 'error', React.ReactNode>. Hvordan får jeg TypeScript.Type ved hjælp af compiler API?

Symbolet på Mapping har to egenskaber som forventet, men hvert ejendomssymbol har ikke en type.

I { success: React.ReactNode, error: React.ReactNode } kunne du få typen for hver egenskab ved at bruge checker.getTypeOfSymbolAtLocation(symbol, symbol.declarations[0]), men dette ser ikke ud til at virke for mappede typer

Svar #1

Dette fungerer, når man angiver enten navnet eller typenoden for typealiaset til node-argumentet i TypeChecker#getTypeOfSymbolAtLocation(symbol, node):

const mappingDec = sourceFile.statements[0] as ts.TypeAliasDeclaration;
const mappingType = typeChecker.getTypeAtLocation(mappingDec.name);

// then example use...
for (const prop of mappingType.getProperties()) {
    const name = prop.getName();
    const type = typeChecker.getTypeOfSymbolAtLocation(prop, mappingDec.name)
}

Relaterede artikler