Машинопись. Как предотвратить перенос при использовании ESNext в качестве цели в tsconfig. json? - PullRequest
0 голосов
/ 06 апреля 2020

Я уже нашел этот вопрос и считаю, что он должен помочь: Как сохранить синтаксис ES6 при переносе с Typescript , но без везения ... Это немного по-другому.

В моем случае, когда yarn tsc --project tsconfig.json файл с:

// ./index.tsx

class Person {
  public name: string;
  constructor(name: string) {
    this.name = name;
  }

  _run = () => {
    console.log('I\'m running!')
  }
}
let person = new Person('John Doe');
console.log(person.name);

стал похож на:

// ./index.js

class Person {
    constructor(name) {
        this._run = () => {
            console.log('I\'m running!');
        };
        this.name = name;
    }
}
let person = new Person('John Doe');
console.log(person.name);

В конце концов, как я могу получить тот же код, что и на вход? Например, без постобработки.

My tsconfig. json:

{
  "compilerOptions": {
    "baseUrl": ".",
    "alwaysStrict": true,
    "noImplicitAny": false,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "allowJs": true,
    "checkJs": false,
    "module": "ESNext",
    "target": "ESNext", 
    "jsx": "react",
    "moduleResolution": "node",
    "types": ["node"],
    "lib": ["dom", "es6", "es2017", "es2018", "es2019", "es2020","esnext"]
  },
  "linebreak-style": [true, "LF"],
  "typeAcquisition": {
    "enable": true
  },
  "include": [
    "**/*"
  ],
  "exclude": [
    "node_modules",
    "**/*.test.ts",
    "**/*.test.tsx",
    "dist"
  ]
}

1 Ответ

2 голосов
/ 06 апреля 2020

Включение useDefineForClassFields в tsconfig.json сгенерирует JavaScript код, который больше похож на ваш источник TypeScript:

{
  "compilerOptions": {
    "useDefineForClassFields": true
  }
}

Используя ваш пример:

// ./index.tsx

class Person {
  public name: string;
  constructor(name: string) {
    this.name = name;
  }

  _run = () => {
    console.log('I\'m running!')
  }
}
let person = new Person('John Doe');
console.log(person.name);

будет доставлено:

// index.js
"use strict";
class Person {
    name;
    constructor(name) {
        this.name = name;
    }
    _run = () => {
        console.log('I\'m running!');
    };
}
let person = new Person('John Doe');
console.log(person.name);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...