Какая опция в tsconfig.json отвечает за типизацию this в объектах?

Почему this имеет тип any в следующем примере?

const x = {
  name: 'x',
  getX() {
    // this почему то any
    this.name;
  },
};

Проект сгенерирован через nest cli nest new

Версии пакетов:

"@nestjs/common": "^10.0.0",
"@nestjs/config": "^3.1.1",
"@nestjs/core": "^10.0.0",

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "ES2021",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false,
    "paths": {
      "@/*": ["./src/*"]
    }
  }
}

Ответы (1 шт):

Автор решения: Andrei Khotko

Ответ предназначен для тех, кто пользуется редакторами кода (IDE) от Microsoft:

  • VS Code
  • Visual Studio

Есть ощущение, что this не будет иметь тип any в иных редакторах кода / IDE. Буду признателен тем людям, которые проверят и на других IDE (JetBrains’ WebStorm, IntelliJ IDEA).


Необходимо выставить опцию "strict": true.

{
  "compilerOptions": {
    "strict": true,
    // ... остальные опции
  }
}

Мне не удалось найти никакого упоминания о влиянии этой опции на определение типа this из контекста кода, поэтому склоняюсь к тому, что такая проблема встречается не во всех редакторах кода и не связана с настройками typescript компилятора.

→ Ссылка