我正在尝试为javascript'Date'原型添加属性。
在javascript中,我只是这样做:
Object.defineProperty(Date.prototype, "fullYearUTC", {
get: function () { return this.getUTCFullYear(); },
enumerable: true,
configurable: true
});
我以为我只能在打字稿中执行以下操作:
class Date
{
get fullYearUTC(): number { return this.getUTCFullYear() }
}
但我收到了错误
Cannot redeclare block-scoped variable 'Date'.
为什么这不起作用?
(请不要评论您是否认为这样做是个好主意。这个问题与此无关。)
答案 0 :(得分:5)
你不能创建一个名为Date
的类,你可以拥有自己的日期对象来扩展它:
class MyDate extends Date {
get fullYearUTC(): number {
return this.getUTCFullYear();
}
}
但是如果你想修改现有的Date
,你需要继续按照你的javascript代码做的事情。
至于将其添加到ts类型,您需要将其用作接口:
interface Date {
readonly fullYearUTC: number;
}
或者您可以扩充全局命名空间:
declare global {
interface Date {
readonly fullYearUTC: number;
}
}
答案 1 :(得分:4)
在打字稿中,如果要添加成员,则可以使用交集类型:
type DateWithNewMember <T> = Partial<T> & { newMember: boolean }
用法:
dates: DateWithNewMember<Date>[];
您可以使用联合体类型:
class newDateClass { readonly fullYearUTC: number; }
date: Date | newDateClass