繁体   English   中英

在typescript中指定默认值时可以使用`this`吗?

[英]Can `this` be used when specifying a default value in typescript?

this范围在打字稿的方法的参数列表?

请考虑以下代码

class Foo {
    constructor(public name) {}
    bar(str: string = this.name) { console.log(str); }
}

let f = new Foo("Yo");
f.bar();

str的默认值是使用this指定的,即使我们不在实例方法的主体内。

目前(在打字稿1.8中)这是有效的,因为它被转换为:

Foo.prototype.bar = function (str) {
    if (str === void 0) { str = this.name; }
    console.log(str);
};

所以this方法中使用但是这被指定是合法的吗?

我粗略地瞥了一眼规格,找不到答案。

注意:这在C ++中是不合法的,这让我怀疑它是一个预期的功能还是仅仅是一个关于转换过程的人工制品。

8.3.1构造函数参数一节中,明确声明在构造函数参数中使用this默认值表达式是一个错误。

8.4.2成员函数声明一节中,没有提到在普通类方法(非构造函数)中的默认值表达式中使用this的任何错误。

6.6代码生成最后解释了代码是以下列形式生成的:

if (<Parameter> === void 0) { <Parameter> = <Default>; }

其中Parameter是参数名称,Default是默认值表达式。

换句话说,当前规范明确允许在参数默认值表达式中使用this ,但构造函数除外。

根据规范,您的代码完全有效。

是。 根据EcmaScript 6 规范它是有效的,TypeScript转换器应该这样处理它。

由于默认参数是在调用时计算的,因此您甚至可以在默认值中使用方法调用和其他参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM