Skip to content

⬅️ Back to Table of Contents

📄 no-typescript-default-import

📊 Analysis Summary

Metric Count
🔧 Functions 1
📦 Imports 2

📚 Table of Contents

🛠️ File Location:

📂 packages/eslint-plugin-internal/src/rules/no-typescript-default-import.ts

📤 Default Export

export default createRule({ ... })
Property Value
name 'no-typescript-default-import'
meta.type 'problem'
meta.docs.description "Enforce that packages rules don't do import ts from 'typescript';"
meta.fixable 'code'
meta.messages.noTSDefaultImport [ "Do not use the default import for typescript. Doing so will cause the package's type definitions to do the same.",...
meta.schema []
defaultOptions []

Entry point: create — documented under Functions.


📦 Imports

Name Source
TSESTree @typescript-eslint/utils
createRule ../util/index.js

Functions

create(context: any): { 'ImportDeclaration > ImportDefaultSpecifier'?: undefined;…

Parameters:

  • context any

Returns: { 'ImportDeclaration > ImportDefaultSpecifier'?: undefined; 'TSImportEqualsDeclaration > TSExternalModuleReference'?: undefined; } | { 'ImportDeclaration > ImportDefaultSpecifier'(node: TSESTree.ImportDefaultSpecifier): void; 'TSImportEqualsDeclaration > TSExternalModuleReference'(node: TSESTree.TSExternalModuleReference): void; }

Calls:

  • context.filename.endsWith
  • context.report
  • fixer.replaceText

Internal Comments:

// mts files will import "properly" and so default import is correct

Code
create(context) {
    if (context.filename.endsWith('mts')) {
      // mts files will import "properly" and so default import is correct
      return {};
    }

    return {
      'ImportDeclaration > ImportDefaultSpecifier'(
        node: TSESTree.ImportDefaultSpecifier,
      ): void {
        const importStatement = node.parent;
        if (importStatement.source.value === 'typescript') {
          context.report({
            node,
            messageId: 'noTSDefaultImport',
            fix(fixer) {
              if (importStatement.specifiers.length === 1) {
                return fixer.replaceText(node, '* as ts');
              }

              return null;
            },
          });
        }
      },
      'TSImportEqualsDeclaration > TSExternalModuleReference'(
        node: TSESTree.TSExternalModuleReference,
      ): void {
        const parent = node.parent as TSESTree.TSImportEqualsDeclaration;
        if (node.expression.value === 'typescript') {
          context.report({
            node,
            messageId: 'noTSDefaultImport',
            fix(fixer) {
              return fixer.replaceText(
                parent,
                "import * as ts from 'typescript';",
              );
            },
          });
        }
      },
    };
  }

Generated by Syntax Scribe