开发者问题收集

Typescript 初始化空对象

2020-10-08
689

我正在学习 Typescript,并且正在努力解决下面的代码问题。

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> = {};

因为如果我执行这样的操作,Typescript 会突出显示错误

Type '{}' is missing the following properties from type 'Record<"name" | "title" | "subtitle" | "avatar", string | undefined>': name, title, subtitle, avatar

如果我尝试这样的操作

let values: Record<literalProfile, string | undefined>;

然后 Typescript 说

Variable 'values' is used before being assigned.

在这行

await this.$axios.patch(`/users/profiles/${profile.id}`, values);

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

1个回答

当前,您正在使用 record&lt; listeralprofile,string |不确定的&gt;

而是,您应该使用 {[键入文字范围内的键]?:string}

有微妙的差异。两者都支持 undefined 作为值,但是通过使用可选字段关键字 您可以在初始化对象时省略这些字段。

003748155 >
Wex
2020-10-08