使用typescript中的默认值对参数进行分解

使用typescript中的默认值对参数进行分解,typescript,Typescript,如果我在typescript中有以下模块src/mod.ts: export interface Foo { foo?: number } export function bar({foo = 1}: Foo = {}) { ... } 它编译得很好,我可以在包中使用它。但是,当我编译到dist/mod.js和dist/mod.d.ts时,dist/mod.d.ts包含: declare export function bar({foo}?: Foo) 在另一个typescript包中

如果我在typescript中有以下模块src/mod.ts:

export interface Foo {
  foo?: number
}
export function bar({foo = 1}: Foo = {}) {
 ...
}
它编译得很好,我可以在包中使用它。但是,当我编译到dist/mod.js和dist/mod.d.ts时,dist/mod.d.ts包含:

declare export function bar({foo}?: Foo)
在另一个typescript包中使用时会导致错误:类型“Foo | undefined”没有属性“Foo”,也没有字符串索引签名


我还没有找到关于谷歌的投诉,尽管我可能对这个问题进行了错误的描述,所以我认为我做错了什么。如何使用typescript中的默认值来分解对象?

请尝试在类中定义公共属性

export interface Foo {
  foo?: number
}

 /** @class */
export class bar {
     public foo?: number;

     constructor(obj: Foo = {} as Foo) {
         let {
              /** Set defaults for the destructured object here */
             foo = 1
         } = obj;

         /** Hint: put jsdoc comments here for inline ide auto-documentation */
         this.foo = foo;
     }
}

// Usage
const myBar = new bar({foo:1})

您能展示报告错误的代码吗?您能添加一些关于如何使用函数的详细信息吗?我没有通过一个简单的函数调用bar{foo:0}:…,重新创建错误。。。谢谢你的帮助。这似乎是一个增量编译问题。我使用tsc-watch并进行了纱线升级以刷新库。当直接使用tsc时,问题消失了。我想可能还是一只虫子,但我现在似乎无法重现。可能故事的寓意是不要进行纱线升级,并期望tsc-watch正确地接收包装更改。与标准ES2015相比,这相当可怕。