老实说,我不知道该向我提出什么要求,所以我只想补充一些细节。我来自java,所以我熟悉类。
让我们以一个类为例,为了简单起见,将私有字段删除为public,没有getter和setter
class User{
public String name;
public String email;
}
这在某些情况下很有用,例如有一个用户数组,然后我可以使用类似的东西:
for(User user: usersList){
user.name='some new value'
//since user is a class, code assist, suggests the name and also if I have user.namee it throws an error
}
现在进入javascript,我可以获得一个数组并执行类似
的操作for (let user of usersList){
user.name='some new value'
//however if I type user.nammee no error is thrown and code assist does not know what to recomment
}
我认为现在你可能会得到这个想法。我希望它能够更容易地使用代码辅助正确获取对象字段,并且还因为属性名称输入错误而避免键入错误。我看到的Javascript类只有方法......那么在这种情况下我可以应用什么呢?
答案 0 :(得分:1)
和this "fiddle" on the TypeScript Playground
class User {
constructor(public name: string, public email: string = "") { }
/*
//shorthand for
public name: string;
public email: string;
constructor(name:string, email:string="") {
this.name = name;
this.email = email;
}
*/
}
var usersList = [
new User("Jack"),
new User("Jill"),
new User("Joe")
];
for (let user of usersList) {
user.email = user.name + "@mail.com";
}
由于userList
被识别为User[]
类型,let user
也被输入为let user:User
答案 1 :(得分:0)
JavaScript允许引用对象没有的属性:您可以临时添加它们,如果您读取不存在的属性,则只需获取undefined
。这就是JavaScript的工作原理。
如果您在尝试分配给不存在的属性时想要收到错误,请考虑使用Object.seal
方法,您可以在类的构造函数中应用该方法:
"use strict";
class User{
constructor (name, email) {
this.name = name;
this.email = email;
// Seal will disallow new properties
Object.seal(this);
}
}
const user = new User();
user.name = "Jeff";
console.log(user); // Shows property with "Jeff"
user.nammmeeee = "Jeff"; // Produces error
确保使用严格模式("use strict"
),否则会抑制这些错误。
答案 2 :(得分:-2)
您可以在javascript中执行此操作。就是这样,您的用户列表将是您将拥有用户的阵列。循环将从0循环到长度为1。这个类会有这样的语法。
var userclass = { 名称:' XYZ&#39 ;, 地址:'地址&#39 ;, .....其他道具 }