类型错误:此条件将始终返回"false",因为类型""id" ' and ' "en""没有重叠



我有一个这样的代码:

interface FirstType {
id: number;
email: string;
lastname: string;
name: string;
password: string;
phone: string;
}
interface SecondType {
id: number;
email: string;
lastname: string;
name: string;
password: string;
phone: string;
en: LangType;
}
interface LangType {
name: string;
surname: string;
}
type ObjType = FirstType | SecondType;
const data: [FirstType, SecondType] = [
{
id: 1,
email: "sd",
lastname: "ks",
name: "sd",
password: "sfd",
phone: "sdf",
},
{
id: 1,
email: "sd",
lastname: "ks",
name: "sd",
password: "sfd",
phone: "sdf",
en: { name: "a", surname: "b" },
},
];
const language = "en";
data.map((obj: ObjType) => {
const newObj: {
[key: string]: ObjType[keyof ObjType];
} = { key: obj.id };
Object.keys(obj).forEach((key) => {
const typedKey = key as keyof ObjType;
newObj[key] = obj[typedKey];
if (typedKey !== "id" && typedKey === language && obj[typedKey]) {
for (let value in obj[typedKey] as LangType) {
newObj[value] = obj[typedKey][value];
}
}
});
return newObj;
});

但我收到了一个打字错误:"TypeError:此条件将始终返回"false",因为类型";id"以及";en〃’没有重叠">

如何修复?我试过很多东西,但都不管用

已更新。现在出现了一个新错误:";此条件将始终返回"false",因为类型";电子邮件"|"姓氏"|"name"|"密码"|"电话"以及";en〃’没有重叠">

由于混合了两种不同类型的FirstTypeSecondType,因此需要从if语句中排除属性id,因为检查的是仅出现在SecondType的属性

key as keyof ObjType; 

可以是iden,但仅对第二属性进行检查

if (typedKey !== 'id' && typedKey === language && obj[typedKey]) {

更新答案:

interface FirstType {
id: number;
email: string;
lastname: string;
name: string;
password: string;
phone: string;
}
interface SecondType {
id: number;
email: string;
lastname: string;
name: string;
password: string;
phone: string;
en: LangType;
}
interface LangType {
name: string;
surname: string;
}
type ObjType = FirstType | SecondType
const data: [FirstType, SecondType] = [
{
id: 1,
email: 'sd',
lastname: 'ks',
name: 'sd',
password: 'sfd',
phone: 'sdf'
},
{
id: 1,
email: 'sd',
lastname: 'ks',
name: 'sd',
password: 'sfd',
phone: 'sdf',
en: { name: 'a', surname: 'b' }
}
]
const language = 'en'
data.map((obj: ObjType) => {
const newObj: {
[key: string]: ObjType[keyof ObjType];
} = { key: obj.id }
Object.keys(obj).forEach(key => {
type Keys = keyof ObjType
type LangTypeKeys = keyof LangType
const typedKey: Keys = key as Keys
newObj[key] = obj[typedKey]
if (typedKey.toString() === language && obj[typedKey]) {
const keys : LangTypeKeys[] = Object.keys(obj[typedKey]) as LangTypeKeys[]
for (let i = 0; i < keys.length; i++) {
const lang: LangType = obj[typedKey] as unknown as LangType
newObj[keys[i]] = (lang as LangType)[keys[i]]
}
}
})
return newObj
})

相关内容

最新更新