试图理解为什么我需要在返回语句中使用“ 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'}));
答案 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;
}
但是您可以将其缩短为
get_clean_party <- function(df, feature) {
df[[feature]] <- gsub("D", "Democrat", df[[feature]])
df[[feature]] <- gsub("R", "Republican", df[[feature]])
return(df)
}