Búsqueda de sitios web

javascript - Cómo poner siempre import type al último con eslint-plugin-import


Tengo un proyecto de React Native en el que uso rutas absolutas que comienzan con components/ features/ o infrastructure/

Quería que estuvieran separados de las importaciones de los módulos del nodo, pero quiero

import type {xxx} from 'features|components|infrastructure|';

siempre ir al final dentro de un grupo, o mejor aún que todo el tipo de importación vaya siempre al final de toda la sección de importaciones y, preferentemente, ordenado alfabéticamente.

Hasta ahora se me ocurrió una configuración así

module.exports = {
  root: true,
  extends: ['@react-native-community'],
  plugins: ['import'],
  rules: {
    'import/order': [
      'error',
      {
        groups: [
          ['builtin', 'external'],
          'internal',
          'parent',
          ['sibling', 'index'],
          'object',
          'type',
        ],
        pathGroups: [
          {
            pattern: '@(react|react-native)',
            group: 'external',
            position: 'before',
          },
          {
            pattern: 'components/**',
            group: 'internal',
          },
          {
            pattern: 'features/**',
            group: 'internal',
          },
          {
            pattern: 'infrastructure/**',
            group: 'internal',
          },
        ],
        pathGroupsExcludedImportTypes: ['react'],
        'newlines-between': 'always',
        alphabetize: {
          order: 'asc',
          caseInsensitive: true,
        },
      },
    ],
  },
};

pero el problema aquí es que no separa import y import type y pone los imports así

import React from 'react';
import { View } from 'react-native';

import { NavigationContainer } from '@react-navigation/native';

import RegistrationScreen from 'features/account/screens/Registration';
import type { Test } from 'features/account/types';
import { colors } from 'infrastructure/theme';

Gracias.

Respuesta #1

Usa grupos y pon type al final

"import/order": [
  "error",
  {
    groups: ["builtin", "external", "internal", "parent", "sibling", "index", "object", "type"],
  },
],

Respuesta #2

Pude lograrlo incluyendo type en la opción pathGroupsExcludedImportTypes. Esto indica al plugin que excluya las importaciones de tipos de los grupos de rutas.

pathGroupsExcludedImportTypes: [
  'builtin',
  'object',
  'type',
],

Artículos relacionados