3

我希望打字稿能够检测到函数何时可以返回未定义的值并警告我。我尝试了以下操作,但打字稿网站上的操场编辑器没有显示任何警告

class Test {

    get(key: string) :string{

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

        return hash[key]

    }    

}

当您明确声明它应该只返回某些特定类型时,是否可以让打字稿在有时可能返回未定义值时发出警告?

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并确保仅使用已知属性。

更新:我根据反馈更新了示例。值得注意的是,虽然 using'some-key'会阻止您使用点表示法(因此,如果可以的话,绝对值得删除连字符) - 您仍然可以获得代码完成。

于 2013-04-17T15:20:13.800 回答
0

正如史蒂夫提到的,您可以使用属性访问 (.) 而不是索引访问 ([string])。但这只有在您的属性遵循打字稿命名约定时才有效。即属性名称不能包含“-”,例如以下作品:

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

var test = new Test();
test.hash.someKey;// Valid
test.hash.myKey; // you'll get a warning here
于 2013-04-18T01:45:19.720 回答
0

它可能不会阻止您意外返回 undefined,但您的代码肯定会返回 undefined,如下所示:

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 回答