如何在没有绊倒intellisense的情况下导入打字稿中的对象?

时间:2014-05-06 22:43:08

标签: javascript requirejs typescript durandal durandal-2.0

我正在使用带有durandal的打字稿作为概念证明,老实说他们并没有凝胶化。

最近我尝试解决以下智能感知错误:

"无法将typeof calendarServiceImport转换为ICalendarService"

///<reference path="service/CalendarService.ts"/>
import calendarServiceImport = require("service/CalendarService");

var calendarService: ICalendarService;
calendarService = calendarServiceImport;

使用Durandal,导入调用应该是一个DI调用,应该是一个实例,但是typescript解析器认为它应该是一个类型。

这是我尝试导入的代码:

/// <reference path="../contracts/ICalendarService.ts"/>
/// <reference path="../../configure.d.ts"/>
import configuration = require('viewmodels/configure')

class CalendarService implements ICalendarService {
    private NumberOfDaysToSync : number;

    constructor() {
    }

    getCalendarNames(): string[] {            
        return ["My Calendar","My Other Calendar"];
    }

    pullLatestSchedule(calendarName : string) {

    }
}

export = CalendarService;

我可以摆脱错误,但后来我会引入逻辑错误,这更糟糕,因为它会成为一个应用程序错误。

例如。将calendarService = calendarServiceImport;替换为calendarService = new calendarServiceImport();,但没有任何意义,因为我将第二次实例化该对象。

如何解决此错误?

1 个答案:

答案 0 :(得分:2)

由于TypeScript和Durandal不同意require的语义(&#34;导入此&#34; vs&#34;导入此实例&#34;),您需要在某处添加一个演员。

选项1 - 在消费网站上施放:

import calendarServiceImport = require("service/CalendarService");

var calendarService = <ICalendarService><any>calendarServiceImport;

选项2 - 在出口地点施放:

import configuration = require('viewmodels/configure')

class CalendarService implements ICalendarService {
    private NumberOfDaysToSync : number;

    constructor() {
    }

    getCalendarNames(): string[] {            
        return ["My Calendar","My Other Calendar"];
    }

    pullLatestSchedule(calendarName : string) {

    }
}

var instance = <ICalendarService><any>CalendarService;    
export = instance;