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.isNullOrEmptyundefined当您尝试调用该函数的行。为了解决这个问题,你可以简单地添加

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

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