2016-12-10 3 views
2

Der folgende Code schlägt fehl. Das TypeScript würde (fälschlicherweise) denken, dass der Rückgabetyp string ist und es Ihnen ermöglichen würde, charAt Methode darauf aufzurufen, wenn es tatsächlich eine number ist.Rückgabetyp Sicherheit für überladene Funktionen, TypeScript

Gibt es eine Möglichkeit, den Code zu verbessern, damit TypeScript den Fehler erkennt?

function fn(s: number): number 
function fn(n: string): string 
function fn(arg: any): any { return 0 } 

fn("hi").charAt(0) 

Antwort

0

Wenn Sie sagen, dass Typoskript etwas wahr ist, dann wird es davon ausgehen, dass Sie die Wahrheit sagen.

Entfernen Sie einfach function fn(n: string): string, um diesen Fehler zu erkennen. Definieren Sie nur, was tatsächlich wahr ist.

Wenn der Testfall ignoriert wird, ist der Basisfall für die Methodenüberladung nicht korrekt definiert. Unter Bezugnahme auf https://www.typescriptlang.org/docs/handbook/functions.html#overloads sollte das Basisgehäuse als function fn(arg):any deklariert werden. Beachten Sie das Fehlen eines Typs für den Parameter.

Dies würde immer noch nicht den angegebenen Code als Fehler sehen, da die fn(n:string):string Überlastung von dem angegebenen Parameter abgeleitet wird.

Verwandte Themen