我正在使用带有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();
,但没有任何意义,因为我将第二次实例化该对象。
如何解决此错误?
答案 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;