2016-11-01 13 views
0

Ich habe ein Modul wie folgt definiert in target.d.tsTyposkript Modul nicht gefunden

declare module "target" { 

    export interface Group { 
     name: string; 
     targets?: Target[]; 
    } 

    export interface Target { 
     device: Device; 
     property: Property; 
     value?: Value; 
    } 

    export interface Value { 
     value: number; 
     id?: number; 
     timestamp?: number; 
    } 

    export interface Property { 
     id: number; 
     name: string; 
     channel: number; 
     type: string; 
    } 

    export interface Device { 
     id: number; 
     name: string; 
     type: string; 
    } 

} 

Jetzt verwende ich die definierten Schnittstellen in einer Komponente wie

import {Component, OnInit} from '@angular/core'; 

import {BackendUrl} from '../../../../common/settings'; 
import {contentHeaders} from "../../../../common/headers"; 
import {EventService} from "../../../../service/event.service"; 

import {Input} from "@angular/core/src/metadata/directives"; 
import {Message} from "stompjs"; 
import {Target} from "target"; 

@Component({ 
selector: 'device-switch', 
templateUrl: './switch.component.html' 
}) 
export class SwitchComponent implements OnInit { 

    @Input() 
    public title: string; 

    @Input() 
    public device: any; 

    @Input() 
    public property: any; 

    private checked: boolean; 

    constructor(public authHttp: AuthHttp, private eventService: EventService) { 
     this.checked = false; 
    } 

    ngOnInit() { 
     this.eventService.messages.subscribe(this.on_next); 
    } 

    /** Consume a message from the eventService */ 
    public on_next = (message: Message) => { 

     let data : Target = JSON.parse(message.body); 
     if(data.device.id === this.device.id && data.property.name === this.property.name) { 
      this.checked = (data.value.value > 0); 
     } 

    }; 

} 

Das Problem ist, dass die @Input() Variablen device und property sind Interfacetypen, die auch in meinem target Modul definiert sind.

Aber wenn ich import {Target, Device, Property} from "target"; der Compiler wirft einen Fehler

ERROR in ./src/app/component/view/part/device/switch.component.ts 
Module not found: Error: Can't resolve 'target' in '~/git/xx/frontend/src/app/component/view/part/device' 
@ ./src/app/component/view/part/device/switch.component.ts 16:0-28 
@ ./src/app/component/view/part/group.component.ts 
@ ./src/app/app.module.ts 
@ ./src/main.ts 
@ multi main 

Ich weiß nicht, was ist das Problem ... Intellij nichts markieren ... scheint in Ordnung zu sein.

Antwort

0

Die wahrscheinlichste Ursache für Ihren Fehler ist, dass Ihre Definitionsdatei nicht in den Kompilierungskontext einbezogen wird, so dass Ihr declare module 'target' nie aufgerufen wird.

Es gibt mehrere Möglichkeiten, wie Sie es schließen wählen kann:

  1. hinzufügen ///<reference path="path/to/your/target.d.ts" /> an der Spitze Ihres switch.component.ts.

  2. path/to/your/target.d.ts zum "file":[] Array Fügen Sie in Ihrem tsconfig.json

  3. hinzufügen path/to/your/target.d.ts (oder ein äquivalentes Dateimuster, die es passen würde) an die "include":[] Array in Ihrem tsconfig.json.

Sobald Sie die target.d.ts in Ihrer Zusammenstellung Kontext enthalten bekommen, dann sollten Sie in Ihrer Anwendung import {Target, Device, Property} from 'target' überall können.