与解构相结合的参数属性速记在打字稿,当我们想自动创建在我们从构造函数定义类的属性,我们可以利用的参数属性的简写,例如:在打字稿
class Person {
constructor(public firstName : string, public lastName : number, public age : number) {
}
}
而且届时,transpiled的JavaScript将是:
var Person = (function() {
function Person(firstName, lastName, age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
return Person;
})();
但是,如果我们要接受一个对象在我们的构造,它会是这样的:
interface IPerson {
firstName : string,
lastName : string,
age: number
}
class Person {
constructor(person : IPerson) {
this.firstName = person.firstName;
this.lastName = person.lastName;
this.age = person.age;
}
}
由于打字稿1.5,我们可以利用解构的,e.g:
class Person {
constructor({firstName, lastName, age} : {firstName: string, lastName: string, age: number}) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
}
问题:如何打字稿参数属性速记和解构结合起来?
我试过对象定义之前定义public
,e.g:
class Person {
constructor(public {firstName, lastName, age} : {firstName: string, lastName: string, age: number}) {
}
}
尝试每个变量之前定义它,e.g:
class Person {
constructor({public firstName, public lastName, public age} : {firstName: string, lastName: string, age: number}) {
}
}
但我没有成功。有什么想法吗?
您是否知道为什么需要在括号内包装解构赋值?我的意思是'({manager:this.manager} = args)''中的外部'()'。我发现在映射到对象属性时是必要的(如* this。管理器*),而当通过局部变量映射时通常不需要它们 – superjos
[对象解构部分](https://www.typescriptlang.org/docs/handbook/variable-declarations.html#object-解构)TypeScript手册中写道:“注意,我们必须用括号括住这条语句,JavaScript通常会解析{作为块的开始。” 所以原因是它会认为它是一个块而不是对象解构。 – Schmalls