2016-11-04 5 views
0

mit Typescript 2.0.7Typoskript nicht Fehler werfen auf falsche Versprechen Rückgabetyp


Bei der Verwendung von q Promises, selbst wenn eine definierte Rückgabetyp der Funktion oder sogar die jeweiligen then erklärt, solange die Funktion könnte zurückkehren null Jede Typeinschränkung wird ersetzt und falsche Auflösungstypen verursachen keinen Fehler.

import Q = require('q'); 

class Foo { 
    prop1: string; 
    prop2: number; 
} 

function test() : Q.IPromise<Foo> 
{ 
    return Q.resolve('stuff') 
    .then<Foo>(() => 
    { 
     if(Math.random() > 0.5) 
     { 
     return Q.resolve({ id: 3, value: new Foo() }) // This should throw an error 
     } 
     else 
     { 
     return Q.resolve(null); 
     } 
    }); 
} 

Des Weiteren bei dem Versuch, das gleiche Verhalten mit ES6 Promises folgenden Code zu testen, hat auch nicht einen Fehler aus.

function test(): Promise<Foo> 
{ 
    return new Promise((resolve, reject) => { 
    resolve('foo'); 
    }) 
} 

Könnte jemand dieses Verhalten erklären und was die richtigen Fehler zu bekommen zu tun oder ist das ein Bug mit Typoskript? (Ich habe mehrere Probleme gesehen, die ähnliche Situationen beschreiben, aber keiner von ihnen konnte wirklich dieses Verhalten erklären)

Antwort

0

Wenn Sie eine nicht-generic Promise zurückkehren, wird es tatsächlich als Promise<{}> interpretiert werden, das ist belegbar ist Promise<Foo>. Warum wirft es jetzt einen Fehler auf resolve, könnte es alles sein.

Ihr Code sollte wie folgt stark typisiert sein.

+0

Das habe ich befürchtet, da es Platz für Fehler lässt. Irgendeine Idee auf der ersten? – Aides

+0

Niemals 'Q' verwendet, aber gemäß seiner Eingabe (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/q/Q.d.ts) handelt es sich um die Resolve-Methode, die den versprochenen generischen Typ ableitet. So sollte es sein 'Q.resolve ' – goenning

+0

True - zum Glück ist es genug, um es nur auf die 'Null' Auflösung wie 'Q.resolve (null)' (sonst würde es als 'Versprechen ') aber immer noch zu lösen eher problematisch, da TS nicht sicherstellt, dass der Funktionsrückgabetyp tatsächlich mit dem tatsächlich zurückgegebenen Wert übereinstimmt. – Aides

Verwandte Themen