我正在使用Atom作为我的文本编辑器在Typescript中构建一个项目。我安装了atom-typescript,它自动将我的代码编译为JavaScript。
我要做的是在类型字符串上定义一个新的扩展方法,以确定它是null还是空白。我有一个导出单个函数的主文件,并且尝试验证它的mocha测试都在工作。我遇到的问题是mocha正在抛出类型错误:String.isNullOrEmpty is not a function
这是我的stringExtensions.ts
:
interface StringConstructor {
isNullOrEmpty(str: string): boolean;
}
String.isNullOrEmpty = function(str: string): boolean{
return (!str || 0 === str.length);
}
在我的main.ts
我有以下代码:
///<reference path="extensions/stringExtensions.ts"/>
export function checkForUpdate(){
if(String.isNullOrEmpty(location)){
/* Do Stuff */
}
在main.spec.ts
import {checkForUpdate} from "../lib/update"
describe("test", ()=>{
if("should do something", ()=>{
checkForUpdate();
})
})
如果我将我的代码从扩展文件复制到主文件中,一切正常,所以我知道这是一个参考问题。 Atom-typescript没有错误,它能够很好地找到代码并且一切看起来都很好。
我需要进行哪些修改才能使参考正常工作。我正在查看已编译的JavaScript代码,并且没有来自我的引用命令的导入指令。应该有吗?
答案 0 :(得分:1)
这里的问题是,由于三次斜杠引用,typescript能够找到isNullOrEmpty
定义。但是,执行没有达到函数绑定到String
的程度。即代码行
String.isNullOrEmpty = ...
当您尝试调用该函数时,未执行,这就是String.isNullOrEmpty
为undefined
的原因。要解决此问题,您只需添加
import './<path-to-file>/stringExtensions.ts'
到你的main.ts.导入将执行stringExtensions.ts
中的代码,该函数应该在checkForUpdate
函数中可用。