Ich lerne noch Typoskript so vielleicht bin ich nur im Grunde etwas fehlt, aber ich verstehe nicht, warum der folgende Code einen Übersetzungsfehler führt:Warum gibt TypeScript keinen Kompilierungsfehler für diese Versprechenskette?
// An example without Promises (does not compile)
function getAnObject(): Object {
return { value: 'Hello' };
};
function doSomethingWithAString(input: String) {
console.log(input);
}
const result = getAnObject();
// error TS2345: Argument of type 'Object' is not assignable to parameter of type 'String'
doSomethingWithAString(result);
Aber der folgende Code nicht:
// A similar example with Promises (compiles)
function getAnObjectAsync(): Promise<Object> {
return Promise.resolve({ value: 'Hello' });
};
getAnObjectAsync().then(function (result: String) {
// Throws a runtime exception
console.log(result.toUpperCase());
});
Warum meldet TypeScript nicht, dass die onfulfilled
-Funktion des .then
im Promise-Beispiel result: Object
erhält?
- Mache ich etwas falsch?
- Gibt es etwas, das ich über dieses Beispiel nicht verstehe?
Was ist ein Profi, um Funktionen bivariant zu machen? – Bergi
ich bin auch nicht überzeugt :) aber sie schrieben das: https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-function-parameters-bivariant Die Tatsache, dass Sie nicht definieren können eigene Varianz und dass Dinge in JS mutiert werden kann, hilft nicht – AlexG
Danke für den Link. Ich stimme der Schlussfolgerung nicht zu und denke, dass ihr Argument fehlerhaft ist, aber zumindest haben sie eins :-) – Bergi