我正在学习打字稿,并且在下面的代码中苦苦挣扎。
const profile = state.currentProfile;
type literalProfile = keyof Partial<Omit<Profile, 'id'>>;
const values: Record<literalProfile, string | undefined> = {
name: '',
avatar: '',
title: '',
subtitle: '',
};
Object.entries(data).forEach((entry) => {
const key = entry[0] as literalProfile;
const value = entry[1];
if (value && profile[key] !== value) {
values[key] = value;
}
});
await this.$axios.patch(`/users/profiles/${profile.id}`, values);
问题是,有没有办法像这样将值初始化为空对象?
const values: Record<literalProfile, string | undefined> = {};
因为如果我执行类似此打字稿的操作,则会向我突出显示错误
类型'{}'缺少类型'记录<“名称”中的以下属性| “标题” | “字幕” | “头像”,字符串| undefined>':名称,标题,字幕,头像
如果我尝试这样的事情
let values: Record<literalProfile, string | undefined>;
然后打字稿说
在分配变量之前先使用变量“值”。
在这一行
await this.$axios.patch(`/users/profiles/${profile.id}`, values);
所以我不知道该如何解决,有什么想法吗?
答案 0 :(得分:2)
当前,您正在使用Record<listeralProfile, string | undefined>
。
相反,您应该使用{ [key in literalProfile]?: string }
。
有细微的差别。两者都支持undefined
作为值,但是通过使用可选的字段关键字?
,可以在初始化对象时忽略这些字段。
const values: { [key in literalProfile]?: string } = {};