有沒有辦法指定一個函式型別,它可以回傳除 Promise 之外的任何內容?
我的界面如下所示:
interface AnInterface {
func(): AllowAnythingButAPromise;
}
我試過了:
type AllowAnythingButAPromise<T> = T extends Exclude<any, Promise<any>> ? T: never;
type AllowAnythingButAPromise<T> = T extends Exclude<any, Promise<unknown>> ? T: never;
type AllowAnythingButAPromise<T> = T extends Promise<unknown> ? never : T;
type AllowAnythingButAPromise<T> = T extends Promise<any> ? never : T;
type anything = number | symbol | string | boolean | null | undefined | object | Function;
type AllowAnythingButAPromise<T> = T extends Exclude<anything, Function> ? T: never;
到目前為止沒有運氣......這甚至可能嗎?
uj5u.com熱心網友回復:
沒有支持的方式來執行否定型別。有各種變通方法可以讓一些用例發揮作用。
在您的情況下,我會選擇一個回傳型別,它是原始型別和物件型別的聯合,其中then屬性是可選的并且型別為未定義,確保沒有任何then屬性可以分配給回傳型別。這可能會比您喜歡的更多,但這可能是一個可以接受的折衷方案。
interface AnInterface {
func(): number | boolean | string| symbol | { then?: never, [n: string]: unknown };
}
游樂場鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/429980.html
標籤:打字稿
