typescript继承原生对象问题

我的需求挺简单, 就是继承原生对象里所有的方法和属性, 比如Date对象, 如果不用ts的话, 直接Date.prototype.xxx = {...}, 但是用ts, 就会出现两个问题

1.定义类名时, 报名称冲突

clipboard.png

如果我的类名不变, 这个问题如何解决?

2.找不到父类的方法

Date类

class Date1 extends Date {
    constructor() {
        super()
    }
}
export default Date1

测试类

import Date1 from './Date'
let d = new Date1()
d.getTime()

报这个错

clipboard.png

请问这个怎么解决?
阅读 4.6k
3 个回答

1) 继承肯定是从一个类派生出另一个类,而 Date.prototype.xxxx = .... 这种形式只是对原有类进行扩展。TypeScript 也支持这种方式进行扩展。使用 TypeScript 并不是会完全避免使用 .prototype,官方文档在讲 Mixins 的时候也使用了 .prototype

2) 我不清楚你遇到了什么问题,但是我这里是没发现错误

先尝试了所有代码写在一个文件里

class Date1 extends Date {
    constructor() {
        super();
    }
}

let d = new Date1();
console.log(d.getTime());

又尝试了分开的写法,使用 import/export 语法,仍然没发现问题
(我是使用 ts-node 运行的)

clipboard.png

你这个是扩展……不是继承……
需要声明一下

declare global {
    interface Date {
        isWeekend(): boolean;
    }
}

Date.prototype.isWeekend = function(this: Date) {
    return this.getDay() === 0 || this.getDay() === 6;
}

console.log(new Date().isWeekend());

Date的方法必须要Date类的对象才能用,就算是继承都不行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进