Неэкспортированная переменная с одинаковым именем в нескольких файлах, вызывающая TS2403 - PullRequest
0 голосов
/ 03 февраля 2020

Я новичок в TypeScript, пытаюсь написать Node.js (Node.ts?) Бэкэнд и пытаюсь go об основах настройки моего сервера. Я использую ts-node версии 8.6.2 и машинописную версию 3.7.5 и определяю проверку для некоторых объектов домена следующим образом (в стиле ajv):

// domain_obj_1.ts:
const commonSchema = {
  type: 'object',
  properties: {
    foo: { type: 'string' },
  },
};

export class DomainObject1 {
...
// domain_obj_2.ts:
const commonSchema = {
  type: 'object',
  properties: {
    bar: { type: 'string' },
  },
};

export class DomainObject2 {
...

Тем не менее, ts-node-dev выдает следующую ошибку:

error TS2403: Subsequent variable declarations must have the same type. 
Variable 'commonSchema' must be of type '{ type: string; properties: { foo: { type: string; }; }; }',
but here has type '{ type: string; properties: { bar: { type: string; }; }; }'.

Я могу только предположить, что Typescript обнаруживает столкновение этих отдельных объявлений commonSchema, но они не экспортируются, поэтому я не знаю, как это происходит.

Я многое еще не понимаю о TS и его использовании в Node, но это удивительное поведение, и мне интересно, есть ли что-то очевидное, что я упускаю.

1 Ответ

0 голосов
/ 04 февраля 2020

Придумал способ заставить ts-node-dev прекратить на меня кричать, и это указывает на то, что с моей настройкой было по крайней мере несколько ошибок. Надеемся, что этот ответ может обеспечить достаточное количество крошек для кого-то, кто борется с созданием собственных сборок:

  1. У меня было require('ts-node/register') в верхней части каждого из моих файлов миграции knex, чтобы я мог написать код в современном синтаксисе ES. Оказывается, это, вероятно, вызывало проблему двойной компиляции, которая, кажется, имеет некоторые непредсказуемые последующие эффекты.

  2. Также оказывается, что ts-node, который поддерживает ts-node-dev, необходимо явно сказал, где находится файл tsconfig.json, либо установив переменную окружения TS_NODE_PROJECT, либо передав флаг --project (-P).

Адресация # 1 кажется достаточной для разрешения ошибки, которые я видел, но ради правильности я также обращаюсь к отсутствующему файлу конфигурации, чтобы возможная компиляция в prod была предсказуемой.

...