まだ角度1.5.8を使用しています。長い計算を部分に分割する関数を記述しようとします。約束は約束を返す機能を連鎖させることができますので、私はそのようにそれを書いていると思った:TypeScriptでは、約束を返す再帰関数を定義する方法
interface IResult {
add(s: string): void { ... }
}
function buildResult(): IResult { ... }
function handleItem(s: string): string { ... }
function doWork(data: string[]): ng.IPromise<IResult> {
let i = 0;
const result = buildResult();
const process =(): ng.IPromise<IResult> => {
for(let start = i; i < start + 100; ++i) {
const item = data[i];
if(!item) {
return $q.resolve(result);
}
result.add(handleItem(item));
}
return $timeout(process, 20)
}
return process();
}
これは動作しますが、角度$タイムアウトサービスが値を返す関数ではなく、約束を受け入れるため活字体、コンパイラは文句を言い:
TS2322:タイプ 'IPromise < IPromise>'をタイプ 'IPromise'に割り当てることはできません。 'IPromise < IResult>'プロパティに 'add'プロパティがありません。
この関数でタイプを正しく定義する方法はありますか?
私は2つのオプションが行くように見ることができます:
- プロセスを返すように定義
any
- キャストreturn文:
return $timeout(process, 20) as any as ng.IPromise<IResult>
どれでも良いアイデア?
こちらはhttps://github.com/DefinitelyTyped/DefinitelyTyped/pull/15364で解決されました。 –