【发布时间】:2016-08-19 12:27:54
【问题描述】:
我正在尝试使用用 Typescript 编写的 sammyjs 和 systemjs 作为模块加载器创建一个简单的路由应用程序。
但是面临加载 sammy 的问题。
下面是代码sn-ps
SystemJs 配置
System.config({
transpiler: "typescript",
defaultJSExtensions: true,
map: {
"knockout": "../bower_components/knockout/dist/knockout",
"sammy": "../bower_components/sammy/lib/sammy",
"jquery": "../bower_components/jquery/dist/jquery"
}
});
路由提供者
import { Route } from "./types";
import * as Sammy from "sammy"
export class RouteProvider {
sammyApp: Sammy.Application;
defaultRoute: string;
constructor() {
}
configureRoutes = (routes: Array<Route>) => {
this.sammyApp = Sammy(() => {
routes.map((_route: Route) => {
this.sammyApp.get('#' + _route.path, (context) => {
_route.callBack(context);
});
})
});
this.sammyApp.run('#' + this.defaultRoute);
}
}
当我初始化 RouteProvider 类并调用 configureRoutes 方法时,我遇到了以下错误,
未捕获的类型错误:Sammy 不是函数
我检查了浏览器中的网络选项卡,并且 sammy.js 已加载。此外,我得到了正确的类型定义,并且没有 Typescript 编译错误。
【问题讨论】:
-
您从“sammy”导入所有内容作为 Sammy 对象,您的函数应该是该对象的属性,而不是对象本身,即 Sammy.someFunction()
-
console.log out 里面有什么 Sammy 对象,我相信你会注意到哪里出了问题
-
@Ozrix :我在控制台中记录了 Sammy 对象,它是一个对象,对象 {VERSION: "0.7.6", __useDefault: true} ,不知道如何使用它我查看了 sammy [来源file[(github.com/quirkey/sammy/blob/master/lib/sammy.js) 似乎导出的 Sammy 对象是一个函数
-
好的,你能发布它的输出吗?
-
@Ozrix :我在控制台中记录了 Sammy 对象,它是一个对象,对象 {VERSION: "0.7.6", __useDefault: true} ,不知道如何使用它我查看了 sammy [来源文件 [(github.com/quirkey/sammy/blob/master/lib/sammy.js) 似乎导出的 Sammy 对象是一个函数 –
标签: javascript systemjs typing sammy.js typescript1.8