我在变异中创建一个Vuex模块我使用一个键将对象设置为另一个对象:obj [key] = newobj。我也在这里使用打字稿。
假设:
copy
TypeScript给我一个错误:
// store state interface
export interface Office {
id: number;
name: string;
zip?: string;
city?: string;
address?: string;
phone?: string;
phone2?: string;
}
export interface Organization {
[key: string]: any;
id: number;
name: string;
offices: { [key: string]: Office };
}
// store action
const setOffice = (state: OrganizationState, item: Office) => {
Vue.set<Office>(state.offices, item.id, item);
// or, it does not change much
Vue.set(state.offices, item.id, item);
};
在打字中有2个版本的Vue.set - 一个用于对象,一个用于数组:
25:19 Argument of type '{ [key: string]: Office; }' is not assignable to parameter of type 'Office[]'.
Property 'includes' is missing in type '{ [key: string]: Office; }'.
23 |
24 | const setOffice = (state: OrganizationState, item: Office) =>{
> 25 | Vue.set<Office>(state.offices, item.id, item);
| ^
26 | };
就我而言,它总是使用类型 array 。
答案 0 :(得分:4)
问题是你的第二个参数(item.id
)是一个数字,这使得调用与第一个重载不兼容,第一个重载需要string
作为第二个参数。
简单的解决方案是将id
转换为通话中的string
:
Vue.set<Office>(state.offices, item.id.toString(), item);