Typescript初始化空对象

Typescript初始化空对象,typescript,Typescript,我正在学习typescript,我正在努力处理下面的代码 const profile=state.currentProfile; literalProfile类型=部分的键; 常量值:记录={ 名称:“”, 阿凡达:'', 标题:“”, 副标题:“”, }; Object.entries(data.forEach)((entry)=>{ const key=作为literalProfile的条目[0]; 常量值=条目[1]; if(值和配置文件[键]!==值){ 值[键]=值; } }); 等待

我正在学习typescript,我正在努力处理下面的代码

const profile=state.currentProfile;
literalProfile类型=部分的键;
常量值:记录={
名称:“”,
阿凡达:'',
标题:“”,
副标题:“”,
};
Object.entries(data.forEach)((entry)=>{
const key=作为literalProfile的条目[0];
常量值=条目[1];
if(值和配置文件[键]!==值){
值[键]=值;
}
});
等待此消息。$axios.patch(`/users/profiles/${profile.id}`,值);
问题是,有没有办法像这样将值初始化为空对象

const值:记录={};
因为如果我做了类似于这个类型脚本的事情,就会给我一个错误

类型“{}”缺少类型“记录”中的以下属性:名称、标题、副标题、头像

如果我尝试这样的事情

let值:记录;
然后打字稿说

变量“值”在赋值前使用

在这一行

等待这个。$axios.patch(`/users/profiles/${profile.id}`,值);

所以我不知道如何解决这个问题,有什么想法吗?

目前,您正在使用
Record

相反,您应该使用
{[key in literalProfile]?:string}

有一个微妙的区别。两者都支持将
未定义
作为值,但通过使用可选字段关键字
可以在初始化对象时忽略这些字段

const values: { [key in literalProfile]?: string } = {};

空对象不是该类型的有效值,因为它缺少必需的属性。也许您想要
部分
?或者在初始化对象时,临时向编译器隐瞒对象的类型?无论哪种方式,我都希望在这里看到一个适合放入独立IDE的应用程序,我想亲自演示一下这个问题。一个没有axios的自给自足的玩具示例会很好。你的部分解决方案非常有效,我不知道为什么我没有意识到这个解决方案。尽管如此,我还是想知道在typescript开发人员中,哪种解决方案更常见,是您的解决方案还是@wex解决方案。无论如何谢谢你!您的解决方案按预期工作,但我想知道在哪里可以看到@jcalz提到的您的解决方案和部分解决方案的区别。提前感谢。将对象包装在
Partial
中基本上会将可选关键字添加到每个字段中。您可以在这里阅读更多内容:在您的情况下,实际上不应该对您使用的字段产生影响,因为每个字段都可能是一个未定义的值。