Typescript抱怨我没有使用undefined作为返回类型

时间:2020-10-27 23:28:58

标签: typescript generics undefined

试图理解为什么我需要在返回语句中使用“ undefined”,当在方法“ p”中,我检查以确保存在oldData或newData。

interface List {
    name: string;
    desc: string;
}

interface Sand {
    dot?: string;
}


type DifferenceComparison<U> = (oldData?: U, newData?: U) => U | null;

const user = {
    name: 'super',
    desc: 'cool',
}

// Typescript is complaining I am not returning an 'undefined'
const p: DifferenceComparison<List> = (oldData, newData) => {
    if (!oldData && !newData) {
        return null;
    }

    // When newData or oldData is true assign the data that exist.
    const redLines = newData ? newData : oldData;

    return redLines;
}

console.log(p({name: 'aa', desc: 'aa'}));

1 个答案:

答案 0 :(得分:0)

@UnholySheep是正确的。该错误表明您可能正在返回undefined,这是不可接受的。 Typescript认为,当您最后返回oldData时,undefined仍可能是if (!oldData && !newData)

您已经使用const p: DifferenceComparison<List> = (oldData, newData) => { if (!newData) { return null; } if (!oldData) { return null; } // When newData or oldData is true assign the data that exist. const redLines = newData ? newData : oldData; return redLines; } 进行了检查,但是当您将两者放在一起时,打字稿无法将其理解为type guard。如果分别检查每个值,则可以适当缩小两个变量的类型,并且错误会消失。

const p: DifferenceComparison<List> = (oldData, newData) => {
    return newData || oldData || null;
}

Typescript Playground Link

但是您可以将其缩短为

get_clean_party <- function(df, feature) {
    df[[feature]] <- gsub("D", "Democrat",   df[[feature]])
    df[[feature]] <- gsub("R", "Republican", df[[feature]])
    return(df)
}