我试图弄清楚如何在Typescript中返回一个空对象,我发现很难做到这一点。
举一个人为的例子,我们说:
interface Human {
name: string,
race: string,
city: string
}
interface Alien {
name: string,
species: string,
planet: string
}
type TransformedData = HumanAndroid | AlienPredator;
type HumanAndroid = {
make: string;
model: string;
intelligence: number;
} | {}
interface AlienPredator {
name: string,
finishingMove: string,
planet: string
}
export const transform = (
input: Human | Alien,
type: 'human' | 'alien' = 'human'
): TransformedData => {
switch (type) {
case 'human':
return transformHuman(input as Human);
case 'alien':
return transformAlien(input as Alien);
}
};
function transformHuman(human: Human ): HumanAndroid {
if (human.name === '') {
return {}
}
return {
make: "2020",
model: "MDX343",
intelligence: 100
}
}
function transformAlien(alien: Alien): AlienPredator {
return {
name: 'majinbuu',
finishingMove: 'roundkick',
planet: 'mars'
}
}
在HumanTransform
函数的第一个return语句中:
if (human.name === '') {
return {}
}
我可以将return语句更改为任何内容,例如:
if (human.name === '') {
return {"randomKey": 4}
}
它不会导致错误。我该如何禁止除空物体之外的其他物体?
答案 0 :(得分:0)
问题是,如果您说函数返回x
,那么您可以返回也是x
子类型的任何内容。
您可以使用以下类似方式明确禁止其他属性:
type R = {
[k: string]: never
}
function foo(): R {
return {a:1}; // error
}
这可以解决您的问题。从纯粹的库设计角度来看,我建议您返回null
而不是空对象。