Как импортировать пользовательские типы файлов в Typescript - PullRequest
0 голосов
/ 28 сентября 2019

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

Я попытался импортировать свои пользовательские файлы в обычный файл javascript, и все работает как положено;Я вижу, что созданный мной загрузчик работает, и получаю ожидаемый результат.Но когда я пытаюсь импортировать в машинописный файл, я просто получаю ошибку Cannot find module 'test/test.comp'.Я попытался создать пустой файл декларации и заметил, что сообщение об ошибке меняется на File '[path]/test/test.d.ts' is not a module

Вот мой конфиг веб-пакета:

mode: 'development',
watch: true,
entry: './test/main.js',
output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'build')
},
module: {
    rules: [
        {
            test: /\.ts/,
            use: 'ts-loader',
            exclude: /node_modules/
        },
        {
            test: /\.comp/,
            use: path.resolve(__dirname, 'core/compose-loader.js'),
            exclude: /node_modules/
        }
    ]
},
resolve: {
    extensions: ['.js', '.ts', '.comp'],
    alias: {
        'core': path.resolve(__dirname, "core/"),
        'test': path.resolve(__dirname, "test/")
    }
}

И мой tsconfig.json

{
    "compilerOptions": {
        "outDir": "build",
        "baseUrl": ".",
        "paths": {
            "core": ["core/*"],
            "test": ["test/*"]
        },
        "target": "es2015",
        "typeRoots": ["./core"]

    },
    "include": [
        "test/*.ts"
    ],
    "exclude": [
        "core",
        "node_modules",
        "**/*.comp"
    ]
}

1 Ответ

0 голосов
/ 28 сентября 2019

Вы можете определить типы для всех этих файлов с помощью *.comp в файле declerations.d.ts (или любом другом имени, которое вы выберете).

declare module "*.comp" {
  const value: any; // Add better type definitions here if desired.
  export default value;
}

Возможно, вам также понадобится добавить это к typeRootsв вашем tsconfig.json

{
    "compilerOptions": {
        // Other configuration...
        "typeRoots": [
            "./src/declerations.d.ts"
        ]
    }
}

А теперь import value from "./test.comp" должен работать как положено (по крайней мере, типы).

...