när jag använder TypeScript-kompilatorns API, upptäckte jag att interface ClassDeclaration innehåller en valfri egenskap "name"


När jag använder TypeScript-kompilatorns API upptäckte jag att gränssnittet ClassDeclaration innehåller den valfria egenskapen name. Hur kan jag få en ClassDeclaration-nod utan namn?

Jag upptäckte också att gränssnittet InterfaceDeclaration innehåller en obligatorisk egenskap name.

Varför är det annorlunda?

Svar #1

En klassdeklaration får inte innehålla ett namn när den exporteras som standardexport.

export default class {
    method() {
    }
}

https://ts-ast-viewer.com/#code/KYDwDg9gTgLgBAE2AMwIYFcA28DGnUDOBcA3gFByVwC2wMAFhAgBQCUpFVAvmV0A

Det samma är inte möjligt för ett gränssnitt och det kommer att orsaka ett syntaxfel.

https://ts-ast-viewer.com/#code/KYDwDg9gTgLgBAE2AMwIYFcA28CWA7GYKNAY2DgG8AoAXyA

Jag är inte säker på varför de bestämde det, men att slippa oroa sig för att namnet kanske inte finns gör saker och ting lättare.