Определения окружения Typescript, не связанные в библиотеке - PullRequest
1 голос
/ 30 апреля 2020

Я работаю с инструментом TSDX, чтобы создать библиотеку реагировать на машинопись. У меня есть несколько типов, экспортированных в мой каталог @types/, которые явно подобраны компилятором, так как я использую их в приложении без проблем.

Однако во время моей сборки они не копируются в мой выходной комплект, который меня удивляет, так как на них ссылаются через код (который правильно связывается).

// tsconfig.json
{
  "include": ["src", "types", "test"],
  "compilerOptions": {
    "target": "es5",
    "module": "esnext",
    "lib": ["dom", "esnext"],
    "importHelpers": true,
    "declaration": true,
    "sourceMap": true,
    "rootDir": "./",
    "strict": true,
    "noImplicitAny": false,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": false,
    "noFallthroughCasesInSwitch": true,
    "moduleResolution": "node",
    "baseUrl": "./",
    "paths": {
      "*": ["src/*", "node_modules/*"]
    },
    "jsx": "react",
    "esModuleInterop": true
  }
}

1 Ответ

1 голос
/ 30 апреля 2020

Это на самом деле, хотите верьте, хотите нет, по замыслу.

Вы можете определить местоположение ваших типов в tsconfig. json, и ожидается, что они всегда находятся в окончательной сборке ( Дело в том, что они не перемещены). т.е. с учетом этой структуры:

src/app.ts
types/app.d.ts

Typescript будет ожидать, что ваша опубликованная сборка будет выглядеть примерно так:

build/app.js
build/app.d.ts
types/app.d.ts

Чтобы достичь этого, вы должны либо определить путь к окружающим типам в tsconfig

{
    baseUrl: "./",
    paths: [
        "my-app": "./types/app.d.ts"
    ]
}

или добавьте тип Root, который будет включать все типы в каталоге, будьте осторожны с этим, он переопределит любые существующие корни типа, такие как *, на node_modules/@types, поэтому вам нужно переопределить их.

{
    typeRoots: ['./types', 'node_modules/@types']
}

и затем использует типы, используя импорт my-app, если вы объявили путь.

Ожидается, что ваша окончательная сборка будет включать в себя каталог types в root где он был определен в вашем tsconfig.json.

Я подозреваю, что вы включаете файл .d.ts в каталог с исходным кодом приложения, и поэтому не ожидаете, что он когда-либо попадет в рабочую сборку , В этом случае вам нужно будет вручную переместить его в нужное место в вашей сборке или автоматизировать его с помощью какого-либо другого плагина в зависимости от инструментов сборки.

...