vue UnwrapRefSimple<T> 泛型类型无法在反应时分配给 T

xua*_*uan 15 typescript typescript-generics vuejs3

我创建了一个钩子函数并想在其他地方重用它:

\n
import { ref, Ref, reactive } from 'vue'\n\nconst useSelectAarray = <T>(items: T[]) => {\n  const selectItem: Ref<T|null> = ref(null)\n  const options = reactive([...items])\n  const select = (key: string, value: any) => {\n    const trigger = options.find((item: { [index: string]: any }) => item[key] === value)\n\n    if (typeof trigger !== 'undefined') {\n      selectItem.value = trigger\n    }\n  }\n\n  return {  \n    selectItem,\n    select,\n    items: options\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是在selectItem.value = trigger,我收到类型错误Type 'UnwrapRefSimple<T>' is not assignable to type 'T'\xe3\x80\x82

\n

我怎么解决这个问题?

\n

n00*_*099 24

const selectItem = ref<T>(null) as Ref<T?>
Run Code Online (Sandbox Code Playgroud)

请参阅: https: //github.com/vuejs/vue-next/issues/2136

  • 我在将 ref&lt;T[]&gt;([]) 作为函数的参数传递时发生了这种情况。Typescript 正在抱怨另一个与该参考文献没有链接的论点!您的解决方案有效:将 `ref&lt;T[]&gt;([]) 指定为 Ref&lt;T[])` 解决了问题。 (7认同)
  • 当然,让我们忽略这个问题,每次出现 Typescript 错误时都使用“as”...... (2认同)