Импорт машинописного текста - один класс на файл - PullRequest
0 голосов
/ 12 марта 2019

Я только начал с Typescript для интерфейсного веб-проекта.Моя цель - использовать ООП подход.Таким образом, мое соглашение - один класс за файлом (названный из класса, который это содержит).

Рассмотрите этот пример:

//Car.ts
export default class Car {
    public startEngine (): void {
        console.log('vroom!');        
    }
}

//RaceCar.ts
import Car from './Car';

export default class RaceCar extends Car {
    public startEngine (): void {
        console.log('!!VROOOOOMM!!');        
    }
}

//index.ts 
import RaceCar from './RaceCar';
import Car from './RaceCar';

const car:Car = new RaceCar();

car.startEngine();

Этот кодработает нормально, но у меня есть 2 вопроса:

  • Когда я использую соглашение "один класс на файл" (с экспортом по умолчанию), это действительно раздражает писать import Car from './Car';.Есть ли короткий способ сделать это?Как макрос или что-то?Я пробовал import './Car';, но, конечно, это не импортирует символ Car ...
  • Еще одна неприятная вещь - импортировать Car и RaceCar в index.ts.Есть ли способ импортировать только RaceCar, который уже знает класс Race?

Другими словами, я ищу способ сделать что-то вроде C ++ include.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Когда я использую соглашение "один класс на файл" (с экспортом по умолчанию), это действительно раздражает писать импорт Car из './Car' ;.Есть ли короткий способ сделать это?Как макрос или что-то?Я попытался импортировать './Car';но, конечно, это не импортирует символ автомобиля ...

Чтобы использовать автомобиль, код должен сказать import Car from './Car'.Этот синтаксис в основном означает «запустить код в ./Car и назначить его экспорт по умолчанию для Car».import './Car' допустимо, но это означает «запустить код в ./Car, но мне не нужно использовать то, что он экспортирует».

Тем не менее, различные IDE могут помочь вам автоматически выполнить импорт.Например, я использую код Visual Studio, и если я использую Car где-то в своем коде, не импортируя и не определяя его, я получаю красное подчеркивание и могу в большинстве случаев нажать ctrl-пробел, чтобы автоматически импортировать его.

Еще одна неприятная вещь - импортировать Car и RaceCar в index.ts.Есть ли способ импортировать только RaceCar, который уже знает класс Race?

Если вам нужно напрямую обратиться к какой-либо вещи, экспортируемой файлом Car, вам нужно будет ее импортировать.В вашем примере вы используете Car как тип.Если вам это нужно, то вам нужно импортировать его.Тем не менее, в вашей ситуации я бы, вероятно, просто использовал RaceCar в качестве типа, так как это то, что вы обновляете в любом случае.

import RaceCar from './RaceCar';

const car: RaceCar = new RaceCar();
car.startEngine();
1 голос
/ 12 марта 2019

В TypeScript используется синтаксис + ES6:

Согласно https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import

Импорт всего модуля только для побочных эффектов, без импорта что-нибудь. Это запускает глобальный код модуля, но на самом деле не импортировать любые значения.

import '/modules/my-module.js';

Вам необходимо импортировать символ, который вы хотите использовать:

import myDefault from '/modules/my-module.js'; // myDefault is the default exported symbol in the module.

Следовательно, нет. Вам всегда нужно импортировать символ, который вы хотите использовать явно, и только из этих мест кода, где вам нужно их использовать.

...