Удивительный Typescript Loader выдает ошибку о слишком большом количестве аргументов функции - PullRequest
1 голос
/ 20 ноября 2019

Я получаю ошибки при настройке хука useReducer в Reactjs

ERROR in [at-loader] ./src/reducer.ts:3:372 
    TS2554: Expected 2 arguments, but got 1.

ERROR in [at-loader] ./src/reducer.ts:15:32 
    TS2554: Expected 1 arguments, but got 3.

ERROR in [at-loader] ./src/reducer.ts:21:32 
    TS2554: Expected 1 arguments, but got 3.

Ошибки связаны с вызовом функций с неправильным числом аргументов, но, как ни странно, весь этот файл имеет только одно определение функциии это нигде не вызывается. Строки кода, которым соответствуют сообщения об ошибках, тоже не имеют смысла. Что-то мне не хватает?

reducer.js:

import { SET_USER, CLEAR_USER, RESET } from './actions'

interface Action {
  type: string;
  payload: object;
}

interface State {
  user: object;
  authenticated: boolean;
}

export const initialState = {
  user: {},
  authenticated: false,
}

export const reducer = (state: State, action: Action): State => {
  switch (action.type) {
    case SET_USER:
      return { ...state, user: action.payload, authenticated: true }
    case CLEAR_USER:
      return { ...state, user: initialState.user, authenticated: false }
    case RESET:
      return initialState
    default:
      throw new Error()
  }
}

Примечание, изменение этого файла на файл javascript устраняет любые проблемы.

1 Ответ

0 голосов
/ 22 ноября 2019

Ошибка фактически возникла из-за использования babel и awesome-typescript-loader в веб-пакете

  module: {
    rules: [
      {
        test: /\.(ts|tsx)?$/,
        loader: 'awesome-typescript-loader',
      },
      {
        test: /\.(js|jsx|ts|tsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
        },
      },
    ],
  },

Удаление awesome-typescript-loader исправляет это, поскольку babel 7+ может компилировать машинопись.

Fullwebpack.config.js:

const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = (env) => ({
  entry: './src/index.tsx',
  resolve: {
    extensions: ['.ts', '.tsx', '.js', '.json'],
  },
  output: {
    path: path.join(__dirname, '/build'),
    filename: 'bundle.min.js',
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx|ts|tsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
        },
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './public/index.html',
    }),
    new webpack.DefinePlugin({
      'process.env': JSON.stringify(env),
    }),
  ],
})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...