我是打字稿的新手,我想知道为什么我们在课堂内使用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())
答案 0 :(得分:3)
我相信你的问题是为什么不能我们使用let key word ...
这只是我想的语法选择,但类属性不需要关键字。您可以选择添加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中声明类属性。故意不支持。
答案 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可能也想考虑这样做。