我已经读过typescript如何提供一个简写,你可以使用访问修饰符为constructor参数添加前缀,并在类上自动声明并从构造函数中复制
class Foo {
x: number;
constructor(x:number) {
this.x = x;
}
}
所以前面的例子可以重写为(注意公共x:数字):
class Foo {
constructor(public x:number) {
}
}
但是我不能用带有object literal的参数来做:
export class Hero {
constructor( {public id = 0 , public name = 'noname'}: {id?: number, name?: string } = {}) {
}
}
我得到双重错误:错误TS1005:’=’预期.
是不是可以用打字稿来做?
最佳答案 TypeScript中尚不支持对象销毁和参数属性组合的特定要求.有关详情,请参见
https://github.com/Microsoft/TypeScript/issues/5326.
但是你可以实现一个变通方法并为这个puprose定义一个接口(或类,在TypeScript中并不重要),如下所示:
interface TestInterface {
id: number;
name: string;
}
class Greeter {
constructor(public greeting: string, public objectField: TestInterface) {
}
greet() {
return "Hello, " + this.greeting + " " + this.objectField.name;
}
}
let greeter = new Greeter("world", { id: 0, name: 'no name' });
alert(greeter.greet());
但是如果你将TestInterface定义为类,那么相应的construcor函数将被编译为JS.
var TestInterface = (function () {
function TestInterface() {
}
return TestInterface;
}());