2015-09-30 128 views
4

什麼是正確的使用方式Q承諾TypeScript 1.6如果它們是無效的?也就是說,它們不代表價值。例如:TypeScript和void Q承諾

return Q.Promise<void>((resolve,reject) => { 
    resolve(); 
} 

let deferred = Q.defer<void>(); 
deferred.resolve(); 
return deferred.promise; 

resolve()呼叫被錯誤:

Supplied parameters do not match any signature of call target 
(parameter) resolve: (val: void | Q.IPromise<void>) => void 

注意,以下工作:

let deferred = Q.defer<string>(); 
deferred.resolve("Hello World"); 
return deferred.promise; 

這只是一個錯誤在也許,或者我指出它錯了?打字(更新於本文撰寫2015年8月17日)?

回答

1

對於TS1.6問:我最終使用:

return Q.Promise<void>((resolve,reject) => { 
    resolve(null); 
} 
1

如果沒有返回值,或者我不關心的返回值,我一直用...

return Q.Promise<any>((resolve, reject) => { 
    resolve(); 
} 
+0

嗯,我得到了同樣的錯誤:'(參數)解決:(val:any)=> void提供的參數不匹配調用目標的任何簽名您有任何機會在DefinitelyTyped的不同版本?或TypeScript 1.6? – drarmstr

+0

我在節點env w/TS 1.6中使用'Q'我這樣引入Q:'import q = require('q');'並且像這樣使用它:'let d:Q.Deferred = q .defer();'你如何導入'Q'? – Brocco

+0

我使用TypeScript 1.6的Visual Studio 2015版本,沒有導入,只是一個腳本標記。也許VS是不同的.. – drarmstr