2017-08-14 194 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 > |未定義’。 「 我得到你正在做的,但有時我不會返回一個數組與承諾,也許我只想返回一個單一的對象。 –

相關問題