簡體   English   中英

強制在Typescript中的類中返回所有函數的類型

[英]Force return type of all functions in a class in Typescript

我正在嘗試在Typescript中構建一個類,其中所有函數都必須返回一個Promise,而無需明確聲明每個函數的返回類型。換句話說,向該類添加一個非異步函數應該拋出一個錯誤,即

class myClass {
    errfunc() { // This should throw a compiler error
        return 1;
    }

    correctfunc() {
        return new Promise((res) => res('success')) // This should work correctly
    }
}

我嘗試了以下

interface PromiseDictionary {
    [key: string]: () => Promise<any>;
}
class myClass implements PromiseDictionary {
    a() {
        return new Promise(res => res('success'))
    };
}

但這會引發以下錯誤:

Class 'myClass' incorrectly implements interface 'PromiseDictionary'.
Index signature is missing in type 'myClass'.`

如何才能做到這一點?

您可以說該類使用() => Promise<any>當前類的鍵來實現記錄,這將強制所有公共成員成為返回Promise函數:

class myClass implements Record<keyof myClass, () => Promise<unknown>> {
    errfunc() { // This should throw a compiler error
        return 1;
    }

    correctfunc() {
        return new Promise((res) => res('success')) // This should work correctly
    }
}

這將強制所有功能都沒有參數,以允許具有參數的功能可以使用

class myClass implements Record<keyof myClass, (...a: never[]) => Promise<unknown>> {
    errfunc() { // This should throw a compiler error
        return 1;
    }

    correctfunc(a: string) {
        return new Promise((res) => res('success')) // This should work correctly
    }
}

您應該為方法添加一個promise的返回類型

class myClass {
    async errfunc(): Promise<appropriate_data_type/any> =>  { // This should throw a compiler error
        return 1;
    }

    async correctfunc(): Promise<appropriate_data_type/any>  {
        return new Promise((res) => res('success')) // This should work correctly
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM