3

関数が未定義の値を返す可能性があることを typescript が検出して警告できることを期待していました。次のことを試しましたが、typescript サイトのプレイグラウンド エディターに警告が表示されませんでした

class Test {

    get(key: string) :string{

        var hash = {'some-key': 1, 'some-other-key': 3};

        return hash[key]

    }    

}

関数が特定の型のみを返す必要があると明示的に述べたときに、関数が未定義の値を返す可能性がある場合に typescript に警告させることは可能ですか?

4

3 に答える 3

2

TypeScript は、 を使用するときのように、 を使用するときにプロパティの存在をチェックしませhash[key]hash.myKey。したがって、設計時およびコンパイル時のチェックを取得するには、この情報を公開する方法を変更して、コードがドット プロパティ構文を使用できるようにする必要があります...

したがって、代わりに:

class Test {
    get(key: string) :string{
        var hash = {'some-key': 1, 'some-other-key': 3};
        return hash[key];
    }    
}

var test = new Test();
test.get('myKey');

あなたは公開することができます:

class Test {
    public hash = { someKey: 1, someOtherKey: 3};
}

var test = new Test();
test.hash.myKey; // you'll get a warning here

これは、この設計が実行している内容に適している場合にのみ機能しますが、TypeScript が匿名型を作成し、hash既知のプロパティのみが使用されるようにするため、この方法で警告が表示されます。

更新: フィードバックに基づいて例を更新しました。を使用するとドット表記を使用'some-key'できなくなりますが (可能な場合はハイフンを削除する価値があります)、それでもコード補完が得られることに注意してください。

于 2013-04-17T15:20:13.800 に答える
0

誤って未定義を返すことを止めることはできないかもしれませんが、次のように、コードは間違いなく未定義を返します。

class Test {

    get(key: string) :string{

        var hash = {'some-key': 1, 'some-other-key': 3};

        return hash[key]

    }    

}

var test = new Test();
alert(test.get("asdf"));

TypeScript は、あなたが求めていることを行うために CodeContracts のようなものをサポートする必要があります。

于 2013-04-17T12:44:33.730 に答える