在TypeScript(不是Java,C#或Objecive-C)中,下面的代码是否有更短的语法(类似于:: bind运算符)?
> myfiles <- list.files("C:\\Documents\\R\\wd\\text")
> myfiles
[1] "111 - Copy (2).txt" "111 - Copy (3).txt" "111 - Copy (4).txt" "111 - Copy (5).txt"
[5] "111 - Copy (6).txt" "111 - Copy.txt" "111.txt"
> list.files(path= myfiles, pattern = "Also")
character(0)
下式给出:
./ Company.ts
const company = { rating: 5 }
Company.prototype.getRating.call(company) // <----- NEED A SHORTER SYNTAX
是否有一种替代的较短语法,我可以告诉人们要遵循,或者我应该让他们做多长.prototype。仅限语法?
这样的事情:
class Company {
rating: string;
getRating() {
return this.rating + " stars";
}
}
最好是:
((Company)company).getRating(); // or (company as Company).getRating();
答案 0 :(得分:4)
问题是company
对象不是Company
的实例,它只是一个对象文字。你可以做以下几件事之一:
使用Object.assign
将属性分配给Company
的实例:
const company = Object.assign(new Company(), { rating: 5 })
company.getRating();
创建一个调用Object.assign
的构造函数:
class Company {
rating: number;
constructor(data: Partial<Company>){
Object.assign(this, data);
}
getRating() {
return this.rating + " stars";
}
}
const company = new Company({ rating: 5 });
company.getRating();
或者您可以使用更改对象原型的函数(尽管如果Company
具有构造函数,这可能会导致问题,因为对于通过cast
的对象,构造函数不会被执行,更改__proto__
很慢):
function cast<T>(obj, type: { new(...args): T }): T {
obj.__proto__ = type.prototype;
return obj;
}
const company = cast({ rating: 5 }, Company);
company.getRating();
答案 1 :(得分:0)
TypeScript的目的不是简单地写东西,而是为了提高可读性,启用IDE和编写可扩展代码。 无论如何,编译的js代码将比vanilla js更长,因此比较哪一行更短是没有意义的。
这应该有效:
const company = new Company();
company.rating = 5;
company.ratingString;
在你班上:
class Company {
rating: number;
get ratingString() {
return this.rating + " stars";
}
}
注意:
类中的rating
是一个字符串,但在公司对象中是数字,它不匹配。