Vuex Typescript я получаю сообщение об ошибке «Элемент ‘someMutation’ неявно имеет тип ‘any'». в файле Component.ts

#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 Нет проблем 🙂