TypeScript-kompilator API hent type av kartlagt egenskap


Gitt type Mapping=Record<'success' | 'error', React.ReactNode>. Hvordan får jeg TypeScript.Type ved bruk av compiler API?

Symbolet for Mapping har to egenskaper som forventet, men hvert egenskapssymbol har ingen type.

I { success: React.ReactNode, error: React.ReactNode } kunne du få typen for hver egenskap ved å bruke checker.getTypeOfSymbolAtLocation(symbol, symbol.declarations[0]), men dette ser ikke ut til å fungere for kartlagte typer

Svar #1

Dette fungerer når man oppgir enten navnet eller typenoden til typealiaset for 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)
}

Relaterte artikler