2016-12-02 5 views
0

Hier ist ein Beispiel. All das localforage Paket exportiert ist eine Instanz der privaten LocalForage Klasse. Die jeweilige Typisierung hat eine gleichnamige Schnittstelle, wird aber auch nicht exportiert.Import private Schnittstelle in Typescript

Trotz LocalForage Schnittstelle wird es nicht exportiert, TypeScript und IDE (WebStorm) scheinen es zu erlauben, es von '@ types/localforage' zu importieren. Aber der Typ wird nicht angewendet.

Dieser Code hat keine Fusseln Probleme und keine Importfehler vor customForage.setDriver(...) Linie:

import * as localForage from 'localforage'; 
import { LocalForage } from '@types/localforage'; 

var customForage: LocalForage = localForage; 
customForage.setDriver('custom'); 

aber Ergebnisse in Fehler:

Unresolved function or method setDriver()

Während dieser Code

import * as localForage from 'localforage'; 

/// <reference path="../../../node_modules/@types/localforage/index.d.ts"/> 

var customForage: LocalForage = localForage; 
customForage.setDriver('custom'); 

identifiziert erfolgreich setDriver Methode.

Ich war glücklich, als @types endlich angekommen, und es ist umständlich, relative Pfade für index.d.ts zu pflegen.

Kann dieser Fall in Dateien, die die Schnittstelle verwenden, ohne <reference path="../../... /> behandelt werden? Die Frage ist nicht auf bestimmte localforage Paket beschränkt, aber es ist ein gutes Beispiel für das Problem.

+0

Und wenn Sie nur den zweiten Import und die '/// Paleo

+1

Es ist nicht notwendig, '@ type' direkt im Code zu importieren, es wird nach Namen aufgelöst; und Dateien aus '" node_modules/@ types/* "' sind standardmäßig immer im Kompilierbereich enthalten, auch wenn node_modules in tsconfig.json ausgeschlossen sind. Aber "@ types" -Feature wird nur seit 2016.3 unterstützt, also müssen Sie sicherstellen, dass Sie die neueste WebStorm-Version – lena

+0

@lena Thanks verwenden. Tatsächlich hat 2016.3 dieses Problem nicht und verwendet '@ type' automatisch. Ich denke, das Upgrade löst das Problem, und das ist normales Verhalten für TS 2.x. – estus

Antwort

1

Von dem was ich gelesen habe und von meiner täglichen Arbeit mit @types sollte man nie @types importieren oder referenzieren müssen. @types werden automatisch nach Namen aufgelöst. Also für das Modul localForage werden die @types localForage geladen. Eine kurze Zusammenfassung wurde hier vorgestellt: https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/

ich das Problem denke, wenn WebStorm oder phpstrom verwenden könnte sein, dass Sie nicht die Build-in-Version von Typoskript verwenden und nicht die, die Sie für Ihr Projekt installiert haben. Versuchen Sie, die benutzerdefinierte Typoskript-Version zu verwenden, und laden Sie die Version, die Sie in node_modules installiert haben. Und stellen Sie sicher, Sie verwenden TypeScript 2.0

+0

Danke, Es sieht so aus, als ob die vorherige IDE-Version TS 1.x verwendet hat. – estus