这主要是关于如何使用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'不存在于类型'{prototype:String; fromCharCode(... codes:number []):string; (值?:any):string; new(value?:any):String; }”。
如何做到这一点,以便TypeScript
知道?
编辑#1
String.fromCharCode()
如何实现TypeScript
?
编辑#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
版本&gt; 1.0?)
请参阅MartyIX的第一个答案
解决方案#2 (TypeScript
版本1.0的解决方法)
见第二个答案
答案 0 :(得分:2)
// String.ts
interface StringConstructor {
isNullOrEmpty(text: string): boolean;
}
interface String {
isNullOrEmpty(text: string): boolean;
}
String.isNullOrEmpty = (s:string):boolean => {
return (s == null || s === "");
};
// OtherFile.ts
///<reference path="path/to/String.ts" />
if(!String.isNullOrEmpty("test")){
// Do something
}
var isEmpty = String.fromCharCode(100).isNullOrEmpty("Nah");
这对我有用。界面扩展StringConstructor
。
答案 1 :(得分:1)
正如来自@MartyIX的评论一样,TypeScript 1.0
似乎存在问题。
作为一种解决方法,我已经为String
的原型添加了一种方法:
String.d.ts
(定义)
interface String {
isNullOrEmpty(text: string): boolean;
}
String.ts
(实施)
String.prototype.isNullOrEmpty = function(text) => {
if (text == null || text === "")
return true;
return false;
}
可以使用
if(!String.prototype.isNullOrEmpty(myStringToCheck)){
// do things as of myStringToCheck is set to something
}