2017-09-19 2 views
-1

Der folgende Code führt zu einem Übersetzungsfehler, auch wenn es richtig scheint:Warum verursacht ein heterogenes Ergebnis von Promise.all einen TS-Fehler?

type Name = { name: string }; 
type NamePlus = { name: string, hair: string }; 

type ReturnType = { foo: Name, bar: NamePlus }; 

export async function test(): Promise<ReturnType> { 
    const myName: Name = { name: 'Tom' }; 
    const myNamePlus: NamePlus = { name: 'Larry', hair: 'black' }; 

    const result = await Promise.all([myName, myNamePlus]); 

    return { 
    foo: result[0], 
    bar: result[1], 
    }; 
} 

Der TS Fehler ist: etwas ist schief

Type '{ foo: Name; bar: Name; }' is not assignable to type 'ReturnType'. 
    Types of property 'bar' are incompatible. 
    Type 'Name' is not assignable to type 'NamePlus'. 
     Property 'hair' is missing in type 'Name'. 

Es scheint mit strukturellen Subtyping, aber ich bin mir nicht klar auf genau was diesen Fehler verursacht. Ich würde eine Erklärung lieben.

+2

Dies ist kein Fehler in TypeScript Playground. http://www.typescriptlang.org/play/ - verwenden Sie vielleicht eine ältere Version? –

+0

Wir verwenden Webpack + ts-loader, und der Fehler wird dort ausgegeben. Ich arbeite daran herauszufinden, warum. Danke, dass du das unterstrichen hast! – Dan

Antwort

0

Dieser Fehler tritt nur in Typescript 2.4 auf. Die neueste Version von Typescript löst das Problem.

Verwandte Themen