【问题标题】:is there a way go get typescript to detect when i'm returning undefined from function?有没有办法让打字稿检测我何时从函数返回未定义?
【发布时间】:2013-04-10 02:42:59
【问题描述】:

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

class Test {

    get(key: string) :string{

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

        return hash[key]

    }    

}

当你明确声明它应该只返回某些特定类型时,是否可以让 typescript 发出警告?

【问题讨论】:

  • TypeScript 在设计时在某种程度上强制显式类型。您要问的是根本不涉及 TypeScript 的运行时。因此,这是不可能的。

标签: javascript function typescript


【解决方案1】:

当你使用 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' 会阻止您使用点表示法(因此,如果可以的话,绝对值得去掉连字符) - 您仍然可以获得代码补全。

【讨论】:

  • 但获得some-key 的唯一方法仍然是test.hash['some-key'],如果您拼写错误,它仍然会失败而不会出错,例如test.hash['somer-key']
【解决方案2】:

正如史蒂夫所说,您可以使用属性访问 (.) 而不是索引访问 ([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

【讨论】:

    【解决方案3】:

    它可能不会阻止您意外返回 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 之类的东西才能完成您的要求。

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 1970-01-01
      • 2019-09-08
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 2020-11-03
      相关资源
      最近更新 更多