gpt4 book ai didi

typescript - 为什么 Vuex 状态返回数组作为对象

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:18 25 4
gpt4 key购买 nike

我正在使用 Typescript + vue + vuex,状态定义为

const state: CommonDataState = {
clients: [],
version: 1
}

setter/getter 是

const getters: GetterTree<CommonDataState, RootState> = {
getClients: state=> () => { return state.clients; },
getClientById: state => (id: string) => { return state.clients.filter(x => true)[0]; },
getVersion: state => (): Number => { return state.version; }
}

在调用 getter getClientById 时,

Error in render: "TypeError: state.clients.filter is not a function"

当我使用 console.log() 打印 state.clients 时,它显示结果是一个对象,其默认属性为数组而不是数组类型

{__esModule: true, __ob__: Observer}
default : Array(15)
__esModule : true
__ob__ : Observer {value: {…}, dep: Dep, vmCount: 0}
get default : ƒ reactiveGetter()
set default : ƒ reactiveSetter(newVal)
__proto__ : Object

默认值是正确的数组。但是,当我尝试将 getter 更改为

  getClientById: state => (id: string) => { return state.clients.default.filter(x => true)[0]; },

它返回一个错误

[ts] Property 'default' does not exist on type 'Client[]'.

所以,有人知道是什么导致了这个错误吗?有什么解决办法吗?

最佳答案

尝试改变这个结构

import { GetterTree, Getter } from 'vuex'
import { State } from './index'

const cartProducts: Getter<State, any> = (state: State) => {
return state.cart.added.map(shape => {
// ...
})
}

const getterTree: GetterTree<State, any> = {
cartProducts
}

export default getterTree

关于typescript - 为什么 Vuex 状态返回数组作为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50753530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com