有没有办法将 isNullOrEmpty(str:string) 添加到静态字符串对象。
这样我就可以称之为:
String.isNullOrEmpty(myobj);
我找到了一种将其放在实现上的方法,但这对诸如此类的方法没有帮助。
有没有办法将 isNullOrEmpty(str:string) 添加到静态字符串对象。
这样我就可以称之为:
String.isNullOrEmpty(myobj);
我找到了一种将其放在实现上的方法,但这对诸如此类的方法没有帮助。
String
lib.d.ts
使用以下接口定义
interface StringConstructor {
...
}
declare var String: StringConstructor;
因此,虽然您不能将方法添加到变量中,但您可以将它们添加到接口中,使用
interface StringConstructor {
isNullOrEmpty(str:string):boolean;
}
他们在变量上实现它们,使用
String.isNullOrEmpty = (str:string) => !str;
TypeScript 做了一种叫做声明合并的事情,这在规范的第 10.5 节中有解释。
它的要点是您可以将成员放入模块 foo 中,然后再将更多成员放入模块 foo 中。从 0.9 开始,这也扩展到将成员放入类的命名空间中,只要首先声明该类。这是一个新功能,我发现了它周围的错误,但它应该可以工作。
因此,要具体回答您的问题,您可以这样做:
module String {
export function isNullOrEmpty(s: string): boolean {
return !s;
}
}
var s: string;
alert(String.isNullOrEmpty(s).toString()); // true
s = "";
alert(String.isNullOrEmpty(s).toString()); // true
s = "asdf";
alert(String.isNullOrEmpty(s).toString()); // false
试试看。
显然我的答案并不完整,因为 String 被声明为 var 而不是模块。声明合并不会延续到 vars(从 0.9 开始),这很烦人。仍然有一种方法可以解决这个问题,尽管它有点像 hack:
// filea.ts
module String {
export function isNullOrEmpty(s: string): boolean {
return !!s;
}
}
module mynamespace {
export declare var String: {
new (value?: any): String;
(value?: any): string;
prototype: String;
fromCharCode(...codes: number[]): string;
isNullOrEmpty(s: string): boolean;
}
}
// fileb.ts
/// <reference path="filea.ts" />
module mynamespace {
var s: string;
String.isNullOrEmpty(s); // true
s = "";
String.isNullOrEmpty(s); // true
s = "asdf";
String.isNullOrEmpty(s); // false
}
发生的事情filea
是您在 var String 上放置一个函数,然后声明它mynamespace.String
存在于 lib.d.ts 中的所有 String 以及您添加的内容。然后,只要您在 . 中工作mysnamespace
,对 String 的引用就会假定您正在谈论mynamespace.String
. 那并不存在,所以你会得到你想要的很好的字符串。
就像我说的那样,它有点脏,但是假设你遵循了不错的命名空间约定,你应该有一个顶级命名空间,你只需要这样做一次。但是,如果您想将字符串扩展作为库的一部分共享……那么您就被卡住了。
我的解决方案使用不同的方法,因为string
此阶段的基本类型无法扩展。
module Type {
"use strict";
export module BaseType {
export class ApplicationString {
/**
* Indicates whether the specified string is null or an Empty string.
*
* @property string inputString
* @see https://msdn.microsoft.com/en-us/library/system.string.isnullorempty(v=vs.110).aspx
*/
static isNullOrEmpty(inputString: string): boolean {
if (inputString === null || inputString.length === 0) {
return true;
} else {
return false;
}
}
}
}
}
alert(Type.BaseType.ApplicationString.isNullOrEmpty(null));
alert(Type.BaseType.ApplicationString.isNullOrEmpty(""));
alert(Type.BaseType.ApplicationString.isNullOrEmpty("text"));