Javascript 重写typescript中子项的静态字段

Javascript 重写typescript中子项的静态字段,javascript,typescript,inheritance,static,Javascript,Typescript,Inheritance,Static,我有一个包含静态URL的抽象类,并使用该静态URL实现函数。子类应该重写类A中的静态URL 但是我仍然希望孩子们使用父类A提供的函数来使用子类的静态重写URL。在Typescript中有什么方法可以做到这一点吗 interface IState { cashflowToPost?: CashflowObject; cashflowList: CashflowObject[]; } export default abstract class CashflowListView ext

我有一个包含静态URL的抽象类,并使用该静态URL实现函数。子类应该重写类A中的静态URL

但是我仍然希望孩子们使用父类A提供的函数来使用子类的静态重写URL。在Typescript中有什么方法可以做到这一点吗

interface IState {
    cashflowToPost?: CashflowObject;
    cashflowList: CashflowObject[];
}
export default abstract class CashflowListView extends React.Component<{}, IState> {
    static cashflowObject : CashflowObject;
    static getURL : URL;

    
    callApi() {
        try {
            axios.get(CashflowListView.getURL.toString()).then(response => {
                console.log("called Api");
                this.setState({cashflowList: response.data});
            })
        } catch {
            console.log("failed to call api!")
        }
    }
    


    componentDidMount() {
        this.callApi();
    }

    
}
interface-IState{
cashflowToPost?:现金流对象;
现金流列表:现金流对象[];
}
导出默认抽象类CashflowListView扩展React.Component{
静态现金流对象:现金流对象;
静态getURL:URL;
callApi(){
试一试{
get(CashflowListView.getURL.toString())。然后(响应=>{
log(“称为Api”);
this.setState({cashflowList:response.data});
})
}抓住{
log(“调用api失败!”)
}
}
componentDidMount(){
这是callApi();
}
}
但是我仍然希望孩子们使用父类A提供的函数来使用子类的静态重写URL

子实例当然可以访问父类中的方法,但如果该父类的方法访问静态属性,则从实例调用它将失败:

A类{
静态getURL=http://example.com';
阿莫德(){
log('A.aMethod()getURL:',getURL);
}
}
B类扩展了A类{
静态getURL=http://example.com/BClass';
}
const bin实例=新的B();
bInstance.aMethod();//ReferenceError:找不到变量:getURL
虽然不能“重写”类的静态变量,但可以执行以下操作:

A类{
静态getURL=http://example.com/AClass';
//将方法设为静态并传入url
静态方法(url){
log('aMethod()url:',url);
}
}
B类扩展了A类{
静态getURL=http://example.com/BClass';
}
log('A.getURL:',A.getURL);
A.aMethod(A.getURL);
log('B.getURL:',B.getURL)

B.aMethod(B.getURL)嗯,直到我自己开始搜索它之前,我认为这是不可能的。这里已经回答了这个问题:

抽象类基类{
静态url:string=“hello.com”;
日志(){
construct thisconconstructor=this.constructor作为基的类型;
log('Do it>>>',thisconconstructor.url);
//=>使用“thisconconuctor.url”进行axios调用
}
}
类子扩展基{
静态url:string=“hello1.com”;
}
const c=新的子对象();
c、 log();//=>“hello1.com”

考虑到每个类都应该附加一个URL,因此基于类而不是基于实例,我认为静态是正确的方法?我只想让孩子们在axios调用中使用自己的静态url,而不是CashflowListView.getURL.toString(),你不能这么做。父对象的方法将始终引用父对象的静态变量。谢谢您的回答。但是,如果说我想要一个静态的1GB图像,而不是一个URL,那么将它保存为每个实例的一个字段将被证明是很慢的。我为我的父类编写了很多使用静态图像的代码。我想为一个子类使用另一个静态图像。我需要在子类的父类中使用那个大图像重写函数吗?@Esnaj查看我更新的答案,这是正确的。答案也来自。