TS2345 Аргумент типа не может быть назначен параметру типа: используется один модуль, который объявлен в другом модуле - PullRequest
0 голосов
/ 15 февраля 2020

Я пытался выяснить проблему, используя Webpack, webpack-merge и отдельные файлы разработки Webpack, используя TypeScript, и я вроде понял, что мне нужно объявить функцию псевдонима типа, которая передается из * Файл 1001 * webpack.common.ts в файл webpack.dev.ts .

Вот что я пытался сделать изначально. У меня есть файл webpack.common.ts , который загружается в базовой конфигурации c:

import { Configuration } from 'webpack';
import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin';

const common: Configuration = {
  module: {
    rules: [
      {
        exclude: /node_modules/,
        test: /\.ts(x?)$/,
        use: [{ loader: 'ts-loader' }],
      },
      {
        enforce: 'pre',
        loader: 'source-map-loader',
        test: /\.js$/,
      },
    ],
  },
  resolve: {
    extensions: ['.ts', '.tsx', '.js'],
    plugins: [new TsconfigPathsPlugin({})],
  },
};

export default common;

У меня есть отдельные файлы propack и dev Webpack, использующие webpack-merge. Вот webpack.dev.ts :

import { Configuration } from 'webpack';
import common from './webpack.common';
import path from 'path';

const __dirname = path.resolve();

const dev: Configuration = merge(common, {
  devServer: {
    compress: true,
    contentBase: path.join(__dirname, 'dist/dev'),
    historyApiFallback: true,
    hot: true,
    open: true,
    port: 9000,
  },
  devtool: 'source-map',
  externals: {
    'react': 'React',
    'react-dom': 'ReactDOM',
  },
  mode: 'development',
});

export default dev;

Это приводит к ошибке внутри метода merge:

Аргумент типа 'import (( "... / node_modules / @ types / webpack / index"). Конфигурация 'не может быть назначена параметру типа import ("... / node_modules / @ types / webpack-merge / node_modules / @ types / webpack / index ") .Configuration '.

Исходя из этого, похоже, что webpack-merge имеет свои собственные типы Webpack, а Webpack и webpack-merge используют два разных типа Configuration.

Я попытался обновить наборы webpack-merge, чтобы он импортировал наборы Webpack, а не его собственный набор.

Внутри файла index.d.ts файла webpack-merge:

// import { Configuration } from 'webpack'; 
import { Configuration } from '../webpack';

После этого я получаю другую ошибку из merge метода в webpack.dev.ts :

Аргумент типа '{devServer: { сжимать: логическое значение; contentBase: строка; historyApiFallback: логическое значение; горячий: логический; открытый: логический; номер порта; }; devtool: "карта-источник"; внешние: {'реагируют': строка; 'response-dom': строка; }; режим: «разработка»; } 'нельзя назначить параметру типа «Конфигурация».

При наведении курсора на merge в VS Code, это информация о типе, которую я получаю для него:

( псевдоним) merge (... configs: Configuration []): Configuration

Должен ли я обновлять путь импорта для webpack-merge, чтобы он использовал те же объявления типов? И как я могу обновить merge для ввода этих типов webpack-dev-server (без использования any)?

...