Hur man inaktiverar implicit import i TypeScript


För det första är 'implicit import' inte en officiell term.

Här är det jag kallade 'implicit import'-grejen.

Jag har 2 ts-filer:

fil1: app.ts

import * as angular from 'angular'; // (*)
import component from './component';

file2: component.ts

const component : angular.IComponentOptions = {
    templateUrl: 'component.template.html'
};

export default component;

Här, i component.ts, även om angular inte är importerat, visar TypeScript-kompilatorn aldrig något fel. Om jag tar bort (*)-raden i app.ts-filen, klagar TypeScript-kompilatorn på att det inte finns något angular-namnområde, så jag trodde att moduler som importeras i app.ts också implicit importeras i component.ts när app.ts importerar component.ts. Därför kallar jag detta beteende för 'implicit import'. (Vänligen låt mig veta den officiella termen för detta beteende om den finns)

Hur stänger man av detta beteende? Jag vill göra varje ts-fil så komplett som möjligt.

Svar #1

För det första är 'implicit import' inte en officiell term.

Termen du letar efter är global modul. Den typdefinition av angular som du använder definierade ett globalt angular och därför kan du använda detta globala utan att importera det.

Om en typdefinition definierar en global ... och du använder den typdefinitionen (vilket jag antar att du måste) ... får du en global. Det finns tyvärr inget sätt runt det.

Svar #2

Du har stött på detta TypeScript-problem: UMD-globala som angular kan användas i typpositioner även från ett modul. Ryan Cavanaugh hävdade att TypeScript fungerade som avsett, men jag håller med rapportören av det problemet att beteendet inte är logiskt.

Relaterade artiklar