Typescript包括扩展方法

时间:2017-02-06 01:04:42

标签: typescript

我正在使用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代码,并且没有来自我的引用命令的导入指令。应该有吗?

1 个答案:

答案 0 :(得分:1)

这里的问题是,由于三次斜杠引用,typescript能够找到isNullOrEmpty定义。但是,执行没有达到函数绑定到String的程度。即代码行

String.isNullOrEmpty = ...
当您尝试调用该函数时,

未执行,这就是String.isNullOrEmptyundefined的原因。要解决此问题,您只需添加

即可
import './<path-to-file>/stringExtensions.ts'

到你的main.ts.导入将执行stringExtensions.ts中的代码,该函数应该在checkForUpdate函数中可用。