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