【问题标题】:What is the contract of a function or variable in TypeScriptTypeScript 中函数或变量的契约是什么
【发布时间】:2016-07-24 17:58:09
【问题描述】:
我是 TypeScript 的新手,在我的机器上成功安装后,我在 TypeScript 的官方文档页面中看到了“TypeScript 中的类型注释是记录函数或变量的预期契约的轻量级方法”这句话。
contract 这个词在 TypeScript 中的函数或变量的上下文中是什么意思。
我看过的例子是:
function greeter(person: string){
return "Hello, " + person;
}
var user = "Jane User";
document.body.innerHTML=greeter(user);
和函数变量person附加的字符串注解有关系吗?
对此的任何帮助表示赞赏。
这里是官方documentation的链接
【问题讨论】:
标签:
javascript
typescript
contract
【解决方案1】:
如果您对这种上下文中的合同一词感兴趣:就像您可以期望雇主根据您的合同在每个月底支付您的工资一样,您可以期望greeter 的论点将是字符串(但是你可以很容易地破坏这个合同)
【解决方案2】:
我将尝试使用示例进行解释。
代码如下:
function greeter(person: string){
return "Hello, " + person;
}
var user = "Jane User";
document.body.innerHTML=greeter(user);
我们已经从将字符串值传递给 greeter() 函数到传递一个数字值。忠实于 JavaScript 的动态特性,它并不关心 - 它只是继续并将其转换为字符串以便将其呈现给浏览器。 TypeScript 也很高兴,因为数字可以转换为字符串。
这就是问题所在:这不是我打算发生的。我只打算让 greeter 方法接受一个字符串值,但 JavaScript 不允许我表达这种意图。我可以保证参数值是字符串的唯一方法是编写代码在运行时在 javascript 中检查它。
这就是 TypeScript 的“预期合同”发挥作用的地方。如果我只想传入字符串,我可以明确地说 value 参数是一个字符串。