2017-03-23 1 views
4

Ich habe noImplicitAny für meinen TypeScript-Compiler auf true festgelegt. Wenn ich einen Import wie die folgenden verwenden, wirft es einen Fehler, da ich ausdrücklich bin kein Typ für die foo Variable definieren:So definieren Sie Importvariablentyp

import * as foo from "bar";

ich in der Lage bin zu definiert einen Typ für foo mit der Commonjs Syntax erforderlich:

const foo: FooType = require("bar");

gibt es eine Möglichkeit, einen Typ für foo mit der import * as ... Syntax zu definieren?

Antwort

4

ich Sie so etwas wie meine glauben ...

import * as foo: IFoo from "foo" 

oder

import foo : IFoo from "foo" 

Ist das korrekt?

This was discussed, but ultimately decided against.

Stattdessen wurde empfohlen, dass Sie declare module 'bar' und ihm Ihre entsprechende Typisierung geben. Sobald das erledigt ist, können Sie import * as foo from "bar" mit der richtigen Eingabe.

See this issue for more details on the recommended approach

Ein mögliches Beispiel:

untyped.d.ts

declare module "bar" { 
    const foo:IFoo; 
    export = foo; 
} 

tsconfig.json

{ 
    "compilerOptions": { 
     ... 
    }, 
    "include": [ 
     "untyped.d.ts", 
     "src/**/*.ts", 
     "src/**/*.tsx" 
    ] 
} 

der Name "untyped.d.ts" hat hier keine wirkliche Bedeutung, ich benutze es nur persönlich als ein Sammelsurium für die untypisierten Module in meinen persönlichen Projekten. Fühlen Sie sich frei, es zu nennen, was auch immer sich für Sie richtig anfühlt.

p.s. Sie können auch die files Array-Eigenschaft statt include dafür verwenden, aber ich neige dazu, nicht zu stören, weil files nicht die exclude Eigenschaft respektiert, die für einige Leute verwirrend ist. See the docs for details.

+0

Danke für die Antwort. Wo stelle ich die Moduldeklaration? (Das Modul, das ich Typinformationen für hinzufügen möchte, ist eine 3rd-Party-Abhängigkeit in 'node_modules') – mattnedrich

+0

@mattnedrich Der einfachste Weg ist wahrscheinlich, eine' .d.ts'-Datei in Ihrem Projekt zu erstellen und diese Datei zum '' hinzuzufügen includes' Array Ihrer 'tsconfig.json'. Sie würden diese Deklaration in diese Datei schreiben. – Paarth

+0

Danke! Können Sie der Vollständigkeit halber ein Beispiel hinzufügen, wie die Datei ".d.ts" aus der Datei "tsconfig.json" eingefügt werden kann? – mattnedrich

Verwandte Themen