האם ניתן לבצע שרשור הבטחות פונקציונלי עם TypeScript?
נראה שב-JavaScript ניתן לעשות:
function extendPromise(promise) {
return promise.then(new Promise(() => {}));
}
אבל אם אני מוסיף סוגים, כמו
function extendTypeScriptPromise(promise: Promise<void>) {
return promise.then(new Promise<void>(() => {}));
}
אז קומפיילר TypeScript אומר:
error TS2345: Argument of type 'Promise<void>' is not assignable to parameter of type '((value: void) => void | PromiseLike<void>) | null | undefined'.
Type 'Promise<void>' is not assignable to type '(value: void) => void | PromiseLike<void>'.
Type 'Promise<void>' provides no match for the signature '(value: void): void | PromiseLike<void>'.
למה Promise<void> לא נחשב ל-PromiseLike?
תשובה #1
קוד ה-JavaScript שלך אינו בדיוק כפי שהוא צריך להיראות. הטיעון של Promise.then() חייב להיות פונקציה, לא Promise.
פונקציה זו יכולה להחזיר Promise חדש, void או ערך (שאינו Promise) שמשמש לפתרון ה-Promise ששיטה .then() שלו נקראה. ככל הנראה, בקוד שלך היא חייבת להחזיר Promise חדש.
הקוד הנכון ב-JavaScript הוא:
function extendPromise(promise) {
return promise.then(() => new Promise(() => {}));
}
והקוד המקביל ב-TypeScript הוא:
function extendTypeScriptPromise(promise: Promise<void>) {
return promise.then(() => new Promise<void>(() => {}));
}
