Na psacím stroji, je možné využít eslint no-relative-parent-dovoz hodnoty, ale stále být dovoleno, aby dovoz typy od rodičů?

0

Otázka

Rád používám imports/no-relative-parent-imports eslint pravidlo, aby závislosti mezi různými částmi kódu jasné, a kód snadno testovatelné.

S strojopis, jsem narazil na tento problém: jsem stále potřebují dovážet typy od rodičů dělat dependency injection (pokud jsem dupplicate typy pro každé použití)

Například, pokud jen jsem se překládat kód z právního dokumentaci ke stroji, stane se toto :

// ./add.ts
export default function add (numbers: number[]): number {
  return numbers.reduce((sum, n) => sum + n, 0)
}

export type Add = typeof add

// three.ts
import { Add } from '../add' // <--- Relative import still needed to implement
                             //      dependency injection 

export default function three(add: Add) : number {
  return add([1, 2]);
}

Samozřejmě, že tato úprava nebude projít pravidlo, protože relativní import.

Jediný způsob, jak vidím, by bylo duplikování typu, který bude fungovat, protože strukturální povaha stroji, ale to by bylo náročné na velký projekt.

Je tam pravidlo, že vynucuje závislost injekce, zatímco mě nechá importovat typy deklarované v závislosti ? Protože potřebuju, rozhraní, funkce, parametry, typy, atd...

1

Nejlepší odpověď

0

To je možné realizovat s eslint-plugin-místní pravidla.

Nejprve nainstalujte local-rules plugin :

npm install eslint-plugin-local-rules --save-dev

Použijte jej zavést pravidlo, že dosažení požadovaného účelu :

// eslint-local-rules.cjs

'use strict'

module.exports = {
  'no-relative-parent-imports': {
    meta: {
      docs: {
        description: 'disallow identifiers',
        category: 'Possible Errors',
        recommended: false,
      },
      schema: [],
    },
    create: function (context) {
      return {
        ImportDeclaration: function (node) {
          const tsNode = context.parserServices.esTreeNodeToTSNodeMap.get(node)

          if (tsNode.importClause.isTypeOnly) {
            return
          }

          if (tsNode.moduleSpecifier.text.includes('..')) {
            context.report({
              node: node,
              message: 'Import from relative parent. Une `import type` for types and dependency injection for values.',
            })
          }
        },
      }
    },
  },
}

A konečně konfigurovat eslint, aby ji používat. Minimální konfigurace :

{
  "parser": "@typescript-eslint/parser",
  "plugins": [
    "local-rules"
  ],
  "rules": {
    "local-rules/no-relative-parent-imports": "error"
  }
}
2021-11-23 18:30:54

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................