将对象解构与TypeScript中的参数属性相结合

我已经读过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;
}());
点赞