[英]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.