【发布时间】:2015-10-14 07:56:22
【问题描述】:
这主要是关于如何使用static 自定义方法添加/扩展任何现有类型的问题。
我想用一个函数扩展String 原型,例如isNullOrEmpty 应该以C# 方式调用:
if(!String.isNullOrEmpty(myStringToCheck)){
// do things as of myStringToCheck is set to something
}
在普通的 javascript 中,我可以做类似的事情
String.isNullOrEmpty = function (s) {
if (s == null || s === "")
return true;
return false;
}
但是,当在 TypeScript 中调用它时,它会告诉我
属性“isNullOrEmpty”不存在于类型“{原型:字符串; fromCharCode(...codes: number[]): string; (值?:任何):字符串;新(值?:任何):字符串; }'。
如何才能让TypeScript 知道它?
编辑#1
TypeScript 已经知道的String.fromCharCode() 是如何实现的?
编辑#2
由于项目中的其他依赖项,我目前只允许使用TypeScript 1.0!
编辑#3
String.d.ts
interface StringConstructor {
isNullOrEmpty(): boolean;
}
interface String {
format(...args: any[]): string;
isNullOrEmpty(): boolean;
}
还有我的String.ts
/// <reference path="../../../typings/String.d.ts"/>
String.prototype.format = function (): string {
var formatted = this;
for (var i = 0; i < arguments.length; i++) {
var regexp = new RegExp("\\{" + i + "\\}", "gi");
formatted = formatted.replace(regexp, arguments[i]);
}
return formatted;
}
String.isNullOrEmpty = function(s) { <-- here is the exception
if (s == null || s === "")
return true;
return false;
}
解决方案 #1(TypeScript 版本 > 1.0?)
查看MartyIX的第一个答案
解决方案 #2(TypeScript 1.0 版的解决方法)
查看第二个答案
【问题讨论】:
-
您应该用绿色勾号标记您的答案。 :)
标签: javascript typescript prototype