slyx
slyx

Reputation: 2254

How to disable implicit import in typescript

First of all, 'implicit import' is not a official term.

Here's what I called 'implicit import' thing.

I have 2 ts files:

file1: 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;

Here, in component.ts, even though the angular is not imported, typescript compiler never shows any error. If I remove (*) line in app.ts file, then typescript compiler complains that there's no angular namespace, so I thought that modules imported in app.ts are also implicitly imported in component.ts when app.ts imports component.ts. That's why I call this behavior 'implicit import'.(Please let me know the official term for this behavior if exists)

How to disable this behavior? I want to make each ts file as complete one as possible.

Upvotes: 4

Views: 2684

Answers (2)

Matt McCutchen
Matt McCutchen

Reputation: 30879

You've run into this TypeScript issue: UMD globals such as angular can be used in type positions even from a module. Ryan Cavanaugh claimed TypeScript was working as intended, but I agree with the reporter of that issue that the behavior makes no sense.

Upvotes: 1

basarat
basarat

Reputation: 276239

First of all, 'implicit import' is not a official term.

The term you are looking for is global module. Whichever type definition of angular you are using defined a global angular and therefore you can use this global without importing it.

If a type definition defines a global ... and you use that type definition (which I am assuming you have to) ... you get a global. No two ways around it sorry.

Upvotes: 3

Related Questions