2017-08-14 195 views
1

我想要做的是在我的承诺中返回ReadonlyArray <>,这样我就可以将它返回到调用'dispatchToThisProcess'的原始方法,我之所以要抽象状态更新,是因为我可以更改它以在将来更新多个进程。贝娄是我的代码:TS2345:类型'Promise <ReadonlyArray <Object>>'的参数不能分配给类型为'T | PromiseLike <T> | undefined'

private dispatchToThisProcess<T extends object>(action: Action): Promise<T> { 
    return this.updateState(action.name, action) 
    } 
    // to be called by the dispatchToThisProcess 
    private updateState<T extends object> (name: string, args: any): Promise<T> { 
    return new Promise<T>((resolve, reject) => { 
     console.log('In updateState, this replaced the send<T>(...) method') 
     switch (name) { 
     case 'add-repositories': { 
      const addedRepos: ReadonlyArray<Repository> = new Array<Repository>() 
      for (const path of args) { 
      const addedRepo: any = Promise 
      .resolve(this.repositoriesStore.addRepository(path)) 
      .then(result => addedRepo) 
      addedRepos.join(addedRepo) 
      } 
      const returned = Promise.resolve(addedRepos) 
      resolve(returned) 
      break; 
     } 
     default: { 
      reject() 
      break; 
     } 
     } 
    }) 
    } 

这里是我的错误:我看它

error TS2345: Argument of type 'Promise<ReadonlyArray<Repository>>' is not assignable to parameter of type 'T | PromiseLike<T> | undefined'. 
    Type 'Promise<ReadonlyArray<Repository>>' is not assignable to type 'PromiseLike<T>'. 
    Types of property 'then' are incompatible. 
     Type '<TResult1 = ReadonlyArray<Repository>, TResult2 = never>(onfulfilled?: ((value: ReadonlyArray<Rep...' is not assignable to type '<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) |...'. 
     Types of parameters 'onfulfilled' and 'onfulfilled' are incompatible. 
      Types of parameters 'value' and 'value' are incompatible. 
      Type 'ReadonlyArray<Repository>' is not assignable to type 'T'. 

,有人说加是t扩展对象,但没有我的情况下,帮帮忙,我做不知道该从哪里出发。我正在使用TypeScript 2.4.0。

+0

你用什么T? – libertyernie

+0

类型Repository的ReadonlyArray。存储库是一个对象。 –

回答

0

updateState只返回一个T.您可能希望它返回它们的ReadonlyArray。

private updateState<T extends object> (name: string, args: any): Promise<ReadonlyArray<T>> { 
    return new Promise<ReadonlyArray<T>>((resolve, reject) => { 
+0

我仍然得到同样的错误,但这次它说这句话: “错误TS2345:参数类型的‘无极>’是不能分配给类型的参数‘ReadonlyArray | PromiseLike > |未定义’。 “ 我得到你正在做的,但有时我不会返回一个数组与承诺,也许我只想返回一个单一的对象。 –

相关问题