为什么我们不能在打字稿中使用let里面的关键字

时间:2017-12-09 19:33:49

标签: javascript typescript

我是打字稿的新手,我想知道为什么我们在课堂内使用let关键字进行变量声明,如下所示。提前谢谢。

class Greeter {
    let greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");
console.log(greeter.greet())

3 个答案:

答案 0 :(得分:3)

我相信你的问题是为什么不能我们使用let key word ...

在TypeScript中:

这只是我想的语法选择,但类属性不需要关键字。您可以选择添加public关键字,或者如果您希望类属性为该类型的私有,则可以使用private关键字:

class Greeter {
  greeting: string;
  // or
  public greeting: string;
  //alternatively
  private greeting: string;

这只是为了类型的目的定义属性。以后,当你这样做时:

const greeter = new Greeter;

现在您将能够使用greeter.greeting并且所有字符串方法和TypeScript将成功传输。如果未声明greeting,则在尝试转换时会出现错误

  

Property 'greeting' does not exist on type 'Greeter'

在JavaScript中:

目前无法在JavaScript中声明类属性。故意不支持。

答案 1 :(得分:1)

因为它不是该上下文中的关键字。鉴于wait.until(ExpectedConditions.textToBePresentInElement(By.xpath("path"), "stored query")); driver.find_element_by_link_text("[Comma-Delimited Text (CSV)]").click() 的目的,我不确定将其作为关键字是否有意义 - 它用于限制变量的范围。

类属性(在支持它们的语言中)自然局限于类,显式使用相同的语法似乎没有用。

特别是,它可以解决当前添加属性的方式(在构造函数中分配),并导致实际范围内的内容混淆。

答案 2 :(得分:0)

我认为为什么没有任何特定的文档,但我相信class如何被转换的语法只需要特定于类的属性不应该有任何声明。如果您使用var,则会发生同样的事情,并且您无法在const中使用class

可能值得查看TypeScript Playground以供将来参考。出来的最终代码似乎已经在课堂之外悬挂了?

var Greeter = /** @class */ (function () {
    function Greeter() {
    }
    return Greeter;
}());
var greeting; // hmm?
constructor(message, string);
{
    this.greeting = message;
}
greet();
{
    return "Hello, " + this.greeting;
}
var greeter = new Greeter("world");
var button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function () {
    alert(greeter.greet());
};
document.body.appendChild(button);

有趣的是,Babel在尝试执行此操作时会出错。 Typescript可能也想考虑这样做。