如何解决Vuejs组合API的Ref()类型错误?

Sey*_*don 5 typeerror typescript vue.js vuejs2 vue-composition-api

我正在使用 vue 组合 API 并使用 ref 来表示对象数组,每个对象都有一个 value 属性,似乎打字稿将 ref 的值与每个数组内的属性值混淆了:

在此输入图像描述

正如您在上图中看到的,打字稿告诉我们 arr 的类型是一个包含名称和值的对象数组,但是当我使用 ref 时,它检测到错误的类型。即使我使用如下所示的转换,问题也无法解决:

const arr2 = ref(arr as { name: string; value: number }[]);
Run Code Online (Sandbox Code Playgroud)

但是当我将 value 属性更改为 value2 或其他值时,它将起作用: 在此输入图像描述

更新

这是我今天遇到的另一个问题:

在此输入图像描述

我想知道我应该如何解决这种类型错误?

mwa*_*ren 19

很遗憾您使用图像来显示您的代码,因为我必须再次重新输入它。

是的,很明显,在对象中使用“值”作为键会使 Typescript 感到困惑。您可以通过声明一个接口来绕过它,然后您也可以使用该接口来声明arr2

    interface thing {
        name: string,
        value: number
    };

    const arr: thing[] = [
        {name: "x1", value: 1},
        {name: "x2", value: 2}
    ];

    const arr2: Ref<thing[]> = ref(arr);

    arr2.value.forEach(item => console.log(item.name + ':' + item.value));
Run Code Online (Sandbox Code Playgroud)

然而,解决这个问题的最佳方法显然是不要使用“值”作为对象中的键,因为它可能是 Javascript 和/或 Typescript 中的保留字。

  • 将composition-api从0.5.0升级到0.6.7后,我们应该在右侧使用`Ref&lt;thing[]&gt;`,例如:`const arr2 = ref(arr) as Ref&lt;thing[]&gt;;` https://github.com/vuejs/composition-api/issues/432#issuecomment-655248923 (3认同)