有什么方法可以获取typescript来检测我何时从函数返回undefined?

时间:2013-04-17 11:03:26

标签: javascript function typescript

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

class Test {

    get(key: string) :string{

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

        return hash[key]

    }    

}

当你明确声明它应该只返回一些特定的类型时,函数有时会返回一个未定义的值,是否有可能让typescript发出警告?

3 个答案:

答案 0 :(得分:2)

当您使用hash[key]时,TypeScript不会像使用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'会阻止您使用点符号(因此如果可以的话,绝对值得删除连字符) - 您仍然可以获得代码完成。

答案 1 :(得分: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这样的东西来支持你所要求的。

答案 2 :(得分: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