#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);