簡體   English   中英

如何使用 generics 定義 Typescript 類型

[英]How to define a Typescript type using generics

假設我有以下定義 object 的接口:

interface ExampleInterface {
    a: string:
    b: number;
    c: AsyncFunction<boolean>
}

其中 AsyncFunction 定義為:

type AsyncFunction<T> = () => Promise<T>;

如果提供給 c 的 function: 沒有參數,則當前運行良好,但如果 function 有任何參數,則會導致 TS2322 編譯錯誤。

這個想法是<T>用於定義 function 的 Promise 內的返回類型。 function 可能需要也可能不需要自己的參數,但它必須在 Promise 中提供指定的 T 返回類型。

我的問題是,有沒有辦法修改類型定義,以便在 c 中使用具有零或任意數量參數的任何function :?

我試圖理解推斷,但我所有使用它的嘗試(它可能不是我想要的)都以c結束:有一個(任何)返回類型,這不是我想要的。 我也嘗試過使用以下內容但沒有成功。

type AsyncFunction<T> = (...args: any[]) => Promise<T>;

提前致謝。

您的示例“嘗試了以下沒有成功的完美工作”:

操場

感謝@Rubydesic 讓我遍歷所有內容以提供更多細節,我意識到我是個白痴。

它無法編譯的原因與類型定義無關 - 實際上不需要更改。

問題是沒有參數,我只是將方法名稱傳遞給 c:

async function foo(): Promise<boolean> {
// Body omitted
}

const x: ExampleInterface = {
a: 'a',
b: 0,
c: foo
}

當然,這行得通,但是當方法有參數時,我將這些參數傳入(因為需要括號,所以會嘗試執行它,而不是傳入它 - 經過漫長的一天后我未能意識到的部分 - 談話關於錯過明顯的)。 我在做:

async function bar(a: number): Promise<boolean> {
// Body omitted
}

const x: ExampleInterface = {
a: 'a',
b: 0,
c: bar(0)
}

當我應該做的時候

async function bar(a: number): Promise<boolean> {
// Body omitted
}

const x: ExampleInterface = {
a: 'a',
b: 0,
c: () => bar(0)
}

發布的答案是一個痛苦的提醒,要經常休息一下。 10 年來,我認為我從未對這個問題如此盲目!

暫無
暫無

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

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