【问题标题】:typescript 2.0: parameters with default valuestypescript 2.0:具有默认值的参数
【发布时间】:2017-03-09 09:08:16
【问题描述】:

伙计们,

这是另一个 typescript 2.0 问题(启用了严格的 null 检查模式)。所以,如果你定义一个所有参数都有默认值的函数:

(name = "Luis", age = 40)=>void

那么所有参数都被认为是可选的,也就是说,就好像我们有以下签名:

(name?: string, age?: number) => void

对吗?现在,当我们有这个签名时会发生什么:

(name = "Luis", age: number ) => void

根据 VS 代码,该签名兼容:

(name: string, age: string) => void

现在,如果我激活严格的空检查模式,下面的调用不应该产生错误吗:

doIt(undefined, 30);

编译没问题,但如果我没记错的话,undefined 只会自动添加到可选参数的类型列表中。我没有找到任何对默认初始化参数的引用。

那么,如果之前的电话没问题,有人可以指出我可以在官方文档中找到有关它的信息吗?

谢谢,

路易斯

【问题讨论】:

  • 您认为应该导致编译失败的doIt() 的确切签名是什么?
  • 你好,丹。好吧,就我而言,doIt 类似于这个函数 doIt(name = "Luis", age: number) { .... }.
  • 这解释了为什么没有编译时错误,但我看到@basarat 已经解释了原因:)

标签: typescript typescript2.0


【解决方案1】:

快速说明:您不能仅在签名中指定默认值,例如以下是错误:

declare var foo: (name = "Luis", age = 40) => void; // ERROR: defaults only allowed in implementation

继续下面的代码:

var foo = (name = "Luis", age: number) => null;
foo(undefined, 123);
foo(null, 123); // ERROR 

表明namestringundefined 兼容。工具提示是错误的,但一般分析是正确的。

请随时通过https://github.com/Microsoft/TypeScript/issues提出问题

【讨论】:

    猜你喜欢
    • 2022-10-25
    • 1970-01-01
    • 2013-09-09
    • 2016-10-30
    • 2014-03-09
    • 1970-01-01
    • 2013-02-14
    • 2023-01-27
    • 2017-12-16
    相关资源
    最近更新 更多