Typescript-使函数返回类型为接口实现的类

时间:2018-08-16 02:35:15

标签: typescript generics return-type

我有以下代码:

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 }}?

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的正确类型。您的函数尝试检测实际的基础类没有任何意义。