우리는 여전히 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'속성이 없습니다.
이 함수에서 유형을 올바르게 정의 할 수있는 방법이 있습니까?
나는 두 가지 옵션이 가고 볼 수 있습니다
- 프로세스가 돌아 정의
any
- 캐스트 return 문 :
return $timeout(process, 20) as any as ng.IPromise<IResult>
어떤 더 나은 아이디어?
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15364 여기에서 해결되었습니다. –