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