簡體   English   中英

Typescript - 使函數返回類型成為接口實現的類

[英]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 ,而是希望返回類型是實現Crosserundefined的類的類型。

我嘗試使用泛型並執行類型斷言:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM