Машинописный текст, ожидалось 0 аргументов, но получил один (этот)

#typescript

Вопрос:

Пытаюсь изменить некоторый код javascript на машинописный, когда я столкнулся с этой ошибкой: введите описание изображения здесь

Это сбивает с толку, потому что оно вводится с аргументом

 interface Command {
  execute: (client: Client, message: Message) => void;
  init: (this: this) => void;
  help: {
    name: string;
    aliases: string[];
  };
  conf: {
    location: string;
  };
}
 

он даже заявляет, что ожидает одного аргумента:
введите описание изображения здесь

Это что-то из-за того, что я пытаюсь пройти внутрь this ? Я не совсем понимаю, почему это так действует.


мой tsconfig.json

 {
  "compilerOptions": {
    "baseUrl": ".",
    "outDir": "build",
    "module": "esnext",
    "target": "es5",
    "lib": [
      "es6",
      "dom",
      "esnext.asynciterable"
    ],
    "sourceMap": true,
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "rootDir": "src",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "skipLibCheck": true,
    "allowSyntheticDefaultImports": true
  },
  "exclude": [
    "node_modules",
    "build",
    "scripts",
    "acceptance-tests",
    "webpack",
    "jest",
    "src/setupTests.ts"
  ]
}
 

Ответ №1:

Функция, введенная с чем-то, что выглядит как аргумент с именем this , принимает это не как аргумент, а как контекст вызова.

Если props это та this команда, которую вы ожидаете — команда, на которую она похожа, — вам просто нужно вызвать ее нормально:

 props.init();
 

Это передаст props объект как this функцию, и TypeScript сможет его распознать.

Для других ситуаций, чтобы передать другое this в функцию, используйте .call , например:

 props.init.call(someOtherThis);