typescript - Varför används ordet `declare` i `d.ts`-filer
Närhelst tsc genererar d.ts-filer inkluderar det ordet declare där, så här:
export declare class Moment {
name: string;
}
Nu används declare i ts-filer för att säga till tsc att ingen js ska genereras för typen med declare. Så det är logiskt i ts-filerna. Men ingen js genereras från d.ts-filer ändå, varför använda ordet där?
Jag försökte ta bort ordet declare från koden ovan:
export class Moment {
name: string;
}
och det fungerade på samma sätt.
Jag har hittat följande här:
Om en fil har filändelsen .d.ts måste varje definition på rotnivå ha nyckelordet declare framför sig. Detta hjälper till att göra det klart för författaren att ingen kod kommer att genereras av TypeScript. Författaren måste säkerställa att det deklarerade objektet kommer att finnas vid körning.
Så är det enda syftet med declare i d.ts-filer?
Vänligen notera, detta är inte samma fråga som den här, eftersom min fråga handlar om att använda declare i d.ts-filer, inte ts-filer.
Svar #1
Det är ganska enkelt.
när du vill exportera en deklaration av en variabel eller funktion har du två sätt att göra det:
- du kan skapa en variabel eller en funktion på en rad och efter det kan du exportera den på en ny rad.
För att göra det behöver du först "deklarera" variabeln eller funktionen, efter det kan du exportera den.
till exempel:
declare class Moment {
name: string;
}
export Moment;- du kan exportera det i en rad utan att deklarera det först. till exempel:
export class Moment {
name: string;
}Svar #2
Både ".d.ts"-filer och ".ts" bearbetas av samma transpiler. Och nyckelordets betydelse är densamma. Enligt dokumentationen och artikeln:
Nyckelordet declare används för ambianta deklarationer där du vill definiera en variabel som kanske inte har sitt ursprung i en TypeScript-fil.
Nyckelordet declare gör att transpiler inte producerar någon riktig JavaScript-kod och tillåter användning av det "deklarerade" objektet i andra TypeScript-filer.
