angularjs - Uppdaterade mina Typescript-definitioner, bröt Angular-direktiv
Jag uppdaterade precis mina Typescript-definitioner till den senaste tillgängliga idag. I angular.d.ts är detta nu definitionen av scope från IDirective-gränssnittet:
interface IDirective {
...
scope?: boolean | {[boundProperty: string]: string};
...
}
Min direktiv definieras som följer (med bokstäver i stället för de faktiska namnen och irrelevant kod utelämnad):
export class MyDirective implements angular.IDirective {
scope = {
a: "&",
b: "@?",
c: "=?",
d: "=?",
e: "@?",
}
}
Jag får detta kompileringsfel:
Felklass 'MyDirective' implementerar felaktigt gränssnittet 'IDirective'. Typerna för egenskapen 'scope' är inkompatibla.
Typen '{ a: string; b: string; c: string; d: string; e: string; }' kan inte tilldelas typen 'boolean | { [boundProperty: string]: string; }'.
Typen '{ a: string; b: string; c: string; d: string; e: string; }' kan inte tilldelas typen '{ [boundProperty: string]: string; }'.
Indexsignatur saknas i typ '{ a: string; b: string; c: string; d: string; e: string; }'.
Jag förstår inte varför jag får detta. Var och en av egenskaperna är en sträng, vilket är vad { [boundProperty: string]: string; }-delen vill ha, eller hur?
Hur ändrar jag min omfattningsdefinition för att passa den uppdaterade definitionen?
Svar #1
Jag provade din kod och den transpilerar utan problem. Jag skulle stänga och starta om vilket IDE du än använder och se om det här felet försvinner; det verkar fungera ganska ofta för mig som Visual Studio-användare när TypeScript-fel inte verkar rimliga.
Om det inte fungerar, se till att du har uppdaterat din version av TypeScript-kompilatorn till den senaste versionen.
Jag vet att det inte är det senaste men detta är den typning jag använder: registry:dt/angular#1.5.0+20161101124950 Och min version av TypeScript: 2.1.5.0