TypeScript:如何将静态方法添加到内置类
问题描述:
是否有无论如何添加一些静态方法类型如Date
,String
, Array
等?TypeScript:如何将静态方法添加到内置类
比如我想添加方法today
到Date
类,并在JavaScript中我可以将属性简单地添加到它也许我用Object.defineProperty:
Date.today = function(){
let date = new Date;
date.setHours(0,0,0,0);
return date;
}
Object.defineProperty(Date, 'today', { get() { ... }});
但我没无论如何都不知道TypeScript
关于这个新的静态成员。 我错过了什么,或者我谷歌错误的方式吗?
答
你必须以增强DateConstructor
界面添加静态属性:
declare global {
interface DateConstructor {
today:() => Date
}
}
Date.today = function(){
let date = new Date;
date.setHours(0,0,0,0);
return date;
}
同样延长StringConstructor
和ArrayConstructor
字符串和数组。见declaration merging。
答
我用这段代码用静态方法扩展Object。 出口类ObjectExtensions {}
declare global {
interface ObjectConstructor {
safeGet<T>(expresstion:() => T, defaultValue: T): T;
}
}
Object.safeGet = function <T>(expresstion:() => T, defaultValue: T): T {
try {
const value = expresstion();
if (value != null) return value;
} catch (e) {
}
return defaultValue;
}
在main.ts你必须调用这个类像这样
new ObjectExtensions();
然后你就可以使用它像这样:
Object.safeGet<number>(() => data.property.numberProperty);
+0
您可以轻松使用'import'。无需创建额外的类。 –
HTTPS:/ /stackoverflow.com/questions/36910521/how-to-extend-native-javascript-types-in-typescript-1-8-using-global-augmentatio – haim770
@ haim770正如我所说,我正在寻找类扩展而不是原型。 –