2016-12-10 13 views
2

以下のコードは失敗します。 TypeScriptは戻り値の型がstringだと誤って思っており、実際にはnumberのときにcharAtメソッドを呼び出すことができます。オーバーロードされた関数の型の安全性、TypeScript

TypeScriptがバグを検出するようにコードを改善する方法はありますか?

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

fn("hi").charAt(0) 

答えて

0

Typescriptに何かが真であると伝えると、真実を伝えているとみなされます。

バグを検出するためにfunction fn(n: string): stringを単に削除してください。実際に何が本当であるかだけを定義してください。

テストケースを無視すると、メソッドオーバーロードの基本ケースが正しく定義されていません。 https://www.typescriptlang.org/docs/handbook/functions.html#overloads を参照する場合、ベースケースはfunction fn(arg):anyと宣言する必要があります。パラメータに型がないことに注目してください。

fn(n:string):stringのオーバーロードが指定されたパラメータから導出されるため、このコードはバグとして表示されません。

関連する問題