Typescript kastar inte fel vid felaktig returtyp för promise
använder Typescript 2.0.7
När man använder q-löften, även när man deklarerar en definierad returtyp för funktionen eller till och med respektive then, så länge funktionen kan returnera null överskrids alla typerestriktioner och felaktiga resolve-typer utlöser inget fel.
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);
}
});
}
Dessutom, när man försökte testa samma beteende med ES6-promises kastade följande kod inte heller ett fel.
function test(): Promise<Foo>
{
return new Promise((resolve, reject) => {
resolve('foo');
})
}
Kan någon förklara detta beteende och vad man ska göra för att få det korrekta felet eller är detta en bugg i TypeScript? (Jag har sett flera problem som beskriver liknande situationer men ingen av dem kunde verkligen förklara detta beteende)
Svar #1
När du returnerar ett icke-generiskt Promise kommer det faktiskt att tolkas som Promise<{}>, vilket kan tilldelas Promise<Foo>. Det är därför det nu kastar ett fel på resolve, det kan vara vad som helst.
Din kod bör vara sådan här för att vara starkt typad.
function test(): Promise<Foo>
{
return new Promise<Foo>((resolve, reject) => {
resolve('foo'); //compile error here
})
}
