无论如何,无论如何都要为Date
,String
,Array
等类型添加静态方法?
例如,我想将方法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
这个新的静态成员。
我错过了什么或者我是否以错误的方式谷歌?
答案 0 :(得分:7)
您必须扩充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。
答案 1 :(得分:1)
我使用此代码使用静态方法扩展Object。 export class 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);