2017-11-08 1 views
0

Wenn ich das folgende Modul src/mod.ts in Typoskript:destrukturiert Parameter mit Standardwert in Typoskript

export interface Foo { 
    foo?: number 
} 
export function bar({foo = 1}: Foo = {}) { 
... 
} 

Es kompiliert gut, und ich kann es im Paket. Allerdings, wenn ich zu dist/mod.js und dist/mod.d.ts kompilieren, die dist/mod.d.ts enthält:

declare export function bar({foo}?: Foo) 

, die einen Fehler verursacht, wenn in einem anderen Typoskript Paket verbraucht: Type 'Foo | undefined' has no property 'foo' and no string index signature.

Ich konnte keine Beschwerden über dieses w/google finden (obwohl ich das Problem möglicherweise falsch charakterisiere), also nehme ich an, dass ich etwas falsch mache. Wie sollte ich ein Objekt mit Standardwerten in Typoskript destrukturieren?

+0

Können Sie den Code anzeigen, in dem der Fehler gemeldet wird? – Oblosys

+0

können Sie einige Details hinzufügen, wie genau Sie Ihre Funktion verbrauchen? Ich habe es nicht geschafft, den Fehler mit einem einfachen Funktionsaufruf 'bar ({foo: 0}) neu zu erstellen' –

+0

:(... Danke für Ihre Hilfe. Es scheint, dass es ein inkrementelles Kompilierungsproblem war. Ich benutzte 'TSC- -watch' und führte ein 'Garn-Upgrade' durch, um die Bibliotheken aufzufrischen. Das Problem ging weg, wenn man gerade' tsc' benutzte. Ich schätze wahrscheinlich immer noch einen Fehler, aber ich kann jetzt nicht neu erstellen. Wahrscheinlich ist die Moral der Geschichte " Tun Sie nicht "Garn-Upgrade" und erwarten Sie, dass 'tsc -watch' die Paket-Änderungen korrekt aufnimmt". – shaunc

Antwort

0

Versuchen Sie stattdessen, öffentliche Eigenschaften in einer Klasse zu definieren.

export interface Foo { 
    foo?: number 
} 

/** @class */ 
export class bar { 
    public foo?: number; 

    constructor(obj: Foo = {} as Foo) { 
     let { 
       /** Set defaults for the destructured object here */ 
      foo = 1 
     } = obj; 

     /** Hint: put jsdoc comments here for inline ide auto-documentation */ 
     this.foo = foo; 
    } 
} 

// Usage 
const myBar = new bar({foo:1}) 
Verwandte Themen