[英]TypeScript: type of class that implements a certain interface or method
[英]Typescript - Make the function return type the class that an interface implements
我有以下代碼:
export enum Side {
Left = 'left',
Right = 'right'
}
export interface Crosser {
side: Side
}
export const crossersOnCorrectSide = function(crossers: Crosser[], correctSide: Side): Crosser|undefined {
return crossers.find(crosser => { return crosser.side !== correctSide } )
}
問題是 - 我不希望返回類型是Crosser|undefined
,而是希望返回類型是實現Crosser
或undefined
的類的類型。
我嘗試使用泛型並執行類型斷言:
export const crossersOnCorrectSide = function<T>(crossers: Crosser[], correctSide: Side): T|undefined {
let result = crossers.find(crosser => { return crosser.side !== correctSide } )
if(result !== undefined) {
return result as T
}
return result
//return crossers.find(crosser => { return crosser.side !== correctSide } )
}
但我得到了“Type Crosser 無法轉換為 T 型”。
是否有這樣做的任何“正確”的方式,或將我被迫使用ts-ignore
,或者更糟的是,這是糟糕的設計和recieving輸出之后我應該只是執行類型斷言crossersOnCorrectSide
?
鑒於調用者已經在使用實現類型,您可以直接使用該類型:
export const crossersOnCorrectSide = function <T extends Crosser>(crossers: T[], correctSide: Side): T | undefined {
let result = crossers.find(crosser => { return crosser.side !== correctSide } )
if(result !== undefined) {
return result
}
else return undefined
}
通常使用泛型來確保正確的返回類型,而調用者不必執行強制轉換。 但是,在調用函數時,您仍然需要知道用於T
的正確類型。 您的函數嘗試檢測實際的底層類沒有任何意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.