.d.ts kompileras inte efter TypeScript 2.6.1
Jag använde TypeScript version 2.5 med denna ambienta modul för suncalc-paketet:
// Note: incomplete
// https://www.npmjs.com/package/suncalc
declare module "suncalc" {
interface suncalcResult {
solarNoon: Date;
nadir: Date;
sunrise: Date;
sunset: Date;
sunriseEnd: Date;
sunsetStart: Date;
dawn: Date;
dusk: Date;
nauticalDawn: Date;
nauticalDusk: Date;
nightEnd: Date;
night: Date;
goldenHourEnd: Date;
goldenHour: Date;
}
function sunCalc(date: Date, latitude: number, longitude: number): suncalcResult;
export = { // COMPLAINING HERE <--------------------------- line 24
getTimes: sunCalc
};
}
I TypeScript 2.5 fick jag den här filen som heter suncalc.d.ts och kompilerade utan fel. När jag uppgraderade till 2.6 började det skylla på:
message: 'The expression of an export assignment must be an identifier or qualified name in an ambient context.'
at: '24,12'
source: 'ts'
Men i TypeScripts ändringslogg finns det ingenting om förändringar i ambienta moduler.
Varför kompilerar det inte nu? Hur ska jag skriva exporten i TS2.6?
Svar #1
Detta nämns på sidan för brytande ändringar. Exportuppdrag som det i fråga är körbar kod, och 2.6.1 gjordes striktare i att upprätthålla den allmänna regeln att körbar kod inte är tillåten i deklarationsfiler.
Det föreslagna sättet att skriva om deklarationen är att deklarera en variabel med explicit typ och exportera variabeln:
const _exported: { getTimes: sunCalc };
export = _exported;
