为什么Typescript将箭头符号范围扩展到实例?

时间:2017-10-01 09:59:28

标签: typescript

这是我第二天玩Typescript,我仍然试图理解语法的一些复杂性。我环顾四周,但之前没有看过这个问题。那么有谁可以告诉我为什么就是这种情况?

据我所知,在下面的代码中,fnA和fnB应该是对等的。然而,TS将fnA转码为Javascript中的构造函数,而fnB则在原型中定义。

这似乎意味着扩展Sample的类不能覆盖fnA,只是因为它是用箭头符号编写的,但它们仍然可以覆盖fnB。

换句话说,似乎在Typescript中的类级方法中使用箭头符号相当于声明该方法 final

所以:为什么?

在这里有一些未说出口/惯用的事情,其中​​Typescript基本上说如果你想在原型中使用这个功能,不要使用箭头符号,否则如果你在每个都有一个独特的副本你可以使用它吗?

TS用于确定原型中的内容以及复制到每个实例的内容的实际逻辑是什么?

打字稿:

class Sample {
    public fnA: () => string = 
        () => { return ("Put this in the constructor"); };
    public fnB():string {
        return ("Put this in the prototype");
    }
}

转码为:

var Sample = (function () {
    function Sample() {
        this.fnA = function () { return ("Put this in the constructor"); };
    }
    Sample.prototype.fnB = function () {
        return ("Put this in the prototype");
    };
    return Sample;
}());

1 个答案:

答案 0 :(得分:2)

如果这是你使用TypeScript的第二天,你应该首先学习简单的例子。 无论如何,你可能先给你的代码,然后解释它。

你在做的是:

  • 定义一个名为fnA的公共属性,其类型是无参数字符串值函数,并使用正确类型的匿名函数同时初始化该属性。

  • 您定义了一个名为fnB的公共方法并给出了它的实现。

正如你所说,

TS不会将fnA转码为构造函数"。

相反,TS确实如此,它构建了一个构造函数,其中需要初始化的所有公共属性,受保护属性和私有属性都被初始化为其正确的值。 工作中没有特殊的逻辑,当然也没有惯用的东西。 希望,你喜欢TypeScript。