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

Mot*_*tti 6 default-value typescript

是否this在TypeScript的方法的参数列表中的范围?

请考虑以下代码:

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

let f = new Foo("Yo");
f.bar();
Run Code Online (Sandbox Code Playgroud)

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

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

Foo.prototype.bar = function (str) {
    if (str === void 0) { str = this.name; }
    console.log(str);
};
Run Code Online (Sandbox Code Playgroud)

因此,this使用内部的方法,但这种规定是合法的吗?

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

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

zlu*_*mer 4

在8.3.1 构造函数参数部分中,明确指出this构造函数参数中使用默认值表达式是错误的。

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

6.6代码生成最后解释了代码的生成形式为:

if (<Parameter> === void 0) { <Parameter> = <Default>; }
Run Code Online (Sandbox Code Playgroud)

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

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

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