我有一个名为printForm的函数,它需要同时支持两个接口IOldForm(旧版env)和INewForm(新env),但它存在以下问题:
interface IOldForm {
formDescription: string;
formId: string;
isOpt: boolean;
incude?: boolean;
}
interface INewForm extends Pick<IOldForm, "formDescription"> {
type: string;
route: string;
}
const oldForm = {
formDescription: "oldForm",
formId: "123",
isOpt: true
};
const newForm = {
formDescription: "newForm",
type: "newForm",
route: "456"
};
const test = (trans: INewForm) => {
console.log(trans);
};
const printForm = (form: IOldForm | INewForm): void => {
console.log(form.isOpt);
test(form);
};
printForm(oldForm);
printForm(newForm);

如何解决这个问题以确保printForm同时支持oldForm和newForm类型?谢谢。
发布于 2022-08-28 05:12:17
您必须首先检查您的类型是否为IOldForm或INewForm。就像这样:
const printForm = (form: IOldForm | INewForm): void => {
// by checking this typescript will be informed that which type you wanna use
if("isOtp" in form){
console.log(form.isOpt);
test(form);
}
};
发布于 2022-09-10 11:46:37
const printForm = (form: IOldForm | INewForm): void => {
const { isOpt } = form as IOldForm;
console.log(isOpt);
};
printForm(oldForm);我们可以使用类型断言来解决这个问题。
https://stackoverflow.com/questions/73515981
复制相似问题