eslint-plugin-unicorn
Version:
More than 300 powerful ESLint rules
27 lines (19 loc) • 611 B
JavaScript
import {isUnknownType} from './types.js';
// Best-effort check whether a TypeScript type is a promise. Returns `true`/`false` when known, `undefined` when indeterminate.
export default function isPromiseType(type, checker) {
type = checker.getNonNullableType(type);
if (isUnknownType(type)) {
return;
}
if (type.isUnion()) {
const results = type.types.map(type => isPromiseType(type, checker));
if (results.every(Boolean)) {
return true;
}
if (results.every(result => result === false)) {
return false;
}
return;
}
return checker.getPromisedTypeOfPromise(type) !== undefined;
}