#typescript #vue.js #vuejs2 #vuex
#typescript #vue.js #vuejs2 #vuex
Вопрос:
Я получаю сообщение об ошибке:
«Элемент ‘someMutation’ неявно имеет тип ‘any’.».
Эта ошибка появляется в моем компоненте Vue в Component.ts
файле для мутации, полученном из хранилища Vuex.
У меня есть следующий код в Component.ts
:
@WithRender
@Component({
components: { SomeChildComponent },
})
export default class Component extends Vue {
constructor() {
super();
this.someFunc(this.someComponentMethod);
// ... some logic
}
@Mutation public someMutation;
private someComponentMethod(str: string) {
this.someMutation();
}
}
в запасе для мутаций:
const mutations: MutationTree<State> = {
someMutation(state, name: string): void {
state.prop = state.prop.filter((el: IEl): boolean => el.name !== name);
},
};
const c = {
state,
getters,
mutations,
};
const store = new Vuex.Store(c);
Я попробовал несколько вариантов, таких как @Mutation public someMutation: void;
или @Mutation public someMutation(s: string): void;
, но безуспешно.
Мое намерение состоит в том, чтобы решить проблему, а не просто отключить правило NoImplicitAny
в tslint.json
файле.
Ответ №1:
Основываясь на источнике someMutation
, метод принимает вызванный string
аргумент name
, и он возвращает void
, который набирается следующим образом:
(name: string) => void
Поскольку свойство автоматически инициализируется vuex-class
, мы можем использовать определенное утверждение присваивания, чтобы избежать ошибки «нет инициализатора».
!: (name: string) => void
^
Конечный результат таков:
@Mutation someMutation!: (name: string) => void
Комментарии:
1. Тони, большое тебе спасибо за ответ! Это решение абсолютно решает мою проблему!) Вы — гуру машинописи! Еще раз спасибо!:)
2. @Vika Нет проблем 🙂