Как заставить TypeScript выбрать правильную сигнатуру метода?
Экспериментирую с методом parallelLimit() из библиотеки async, имеющему несколько сигнатур, которые зависят от того, передан ли третий аргумент, или нет, и в JS всё с ней замечательно:
const { parallelLimit } = async
new Promise(async () => {
const tasks = Array(10)
.fill(null)
.map((item, i) => async () => i)
const limit = 5
await parallelLimit(tasks, limit)
.then((results) => console.log(results.join(',')))
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/async/3.2.3/async.js"></script>
Пытаюсь использовать её же в TypeScript:
npm i --save-dev @types/async
Но TypeScript не выбирает правильную сигнатуру, предполагая, что метод вернёт void:
Свойство "then" не существует в типе "void".ts(2339)
Как решить эту проблему?
Ответы (1 шт):
Автор решения: UserTest013
→ Ссылка
Конкретно в вашем случае надо указать передаваемые типы для parallelLimit.
import { parallelLimit } from 'async';
new Promise(async () => {
const tasks = Array(10)
.fill(null)
.map((item, i) => async () => i)
const limit = 5
await parallelLimit<number, number[], Error>(tasks, limit)
.then((results) => console.log({ results }))
})