我有以下代码:
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
或{{1 }}。
我尝试使用泛型并执行类型断言:
undefined
但是我得到“ Type Crosser无法转换为T型”。
是否有任何“正确”的方法可以执行此操作,或者我将被迫使用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 } )
}
,或者更糟糕的是,此设计不好,我应该在收到{{1 }}?
答案 0 :(得分:1)
鉴于调用者已经在使用实现类型,则可以直接使用该类型:
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
的正确类型。您的函数尝试检测实际的基础类没有任何意义。