在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ typescript繼承原生對象問題

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

請問這個怎么解決?
回答
編輯回答
陌顏

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

2) 我不清楚你遇到了什么問題,但是我這里是沒發(fā)現錯誤

先嘗試了所有代碼寫在一個文件里

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

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

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

clipboard.png

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

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

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

你這個是擴展……不是繼承……
需要聲明一下

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