鍍金池/ 問(wèn)答/HTML/ typescript繼承原生對(duì)象問(wèn)題

typescript繼承原生對(duì)象問(wèn)題

我的需求挺簡(jiǎn)單, 就是繼承原生對(duì)象里所有的方法和屬性, 比如Date對(duì)象, 如果不用ts的話, 直接Date.prototype.xxx = {...}, 但是用ts, 就會(huì)出現(xiàn)兩個(gè)問(wèn)題

1.定義類名時(shí), 報(bào)名稱沖突

clipboard.png

如果我的類名不變, 這個(gè)問(wèn)題如何解決?

2.找不到父類的方法

Date類

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

測(cè)試類

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

報(bào)這個(gè)錯(cuò)

clipboard.png

請(qǐng)問(wèn)這個(gè)怎么解決?
回答
編輯回答
陌顏

1) 繼承肯定是從一個(gè)類派生出另一個(gè)類,而 Date.prototype.xxxx = .... 這種形式只是對(duì)原有類進(jìn)行擴(kuò)展。TypeScript 也支持這種方式進(jìn)行擴(kuò)展。使用 TypeScript 并不是會(huì)完全避免使用 .prototype,官方文檔在講 Mixins 的時(shí)候也使用了 .prototype

2) 我不清楚你遇到了什么問(wèn)題,但是我這里是沒發(fā)現(xiàn)錯(cuò)誤

先嘗試了所有代碼寫在一個(gè)文件里

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

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

又嘗試了分開的寫法,使用 import/export 語(yǔ)法,仍然沒發(fā)現(xiàn)問(wèn)題
(我是使用 ts-node 運(yùn)行的)

clipboard.png

2018年9月1日 17:06
編輯回答
只愛你

Date的方法必須要Date類的對(duì)象才能用,就算是繼承都不行。

2017年9月29日 14:31
編輯回答
朕略傻

你這個(gè)是擴(kuò)展……不是繼承……
需要聲明一下

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

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

console.log(new Date().isWeekend());
2017年4月8日 20:27