Typescript包含扩展方法
问题描述:
我正在使用Atom作为我的文本编辑器在Typescript中构建项目。我安装了atom-typescript,它会自动将我的代码编译为JavaScript。Typescript包含扩展方法
我在试图做的是定义一个新的类型字符串扩展方法,以确定它是否为空或空白。我有一个导出单个函数的主文件,并尝试验证它是否正常工作。我遇到的问题是,摩卡抛出一个错误类型: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代码,并且没有来自我的引用命令的导入指令。应该有吗?
答
这里的问题是由于三斜杠引用,打字稿能够找到isNullOrEmpty
定义。但是,执行没有达到函数被绑定到String
的地步。即代码没有被执行
String.isNullOrEmpty = ...
这就是为什么String.isNullOrEmpty
是undefined
当您尝试调用该函数的行。为了解决这个问题,你可以简单地添加
import './<path-to-file>/stringExtensions.ts'
您main.ts.导入将执行stringExtensions.ts
中的代码,并且该函数应该在您的checkForUpdate
函数中可用。