我正在使用的库为JSON.parse
添加了辅助功能,这当然是内置对象的内置方法(但是writable
)。我需要添加以下重载签名,以便让TypeScript编译器了解新功能:
<T>(text: string, type: { new (): T }) => T
显然,我不会触及lib.d.ts
。
我尝试重新声明整个JSON
接口,以及制作该类型的全局JSON
变量,但除了添加新的呼叫签名之外,还复制了所有内置呼叫签名。
如果我只使用新签名重新声明JSON
接口,整个过程似乎正常工作,新方法重载与内置接口一起被接受,但这看起来似乎是hackish和fragile:< / p>
declare interface JSON {
parse<T>(text: string, type: { new (): T }): T;
}
declare var JSON: JSON;
如何正确使用方法重载扩展内置对象?
答案 0 :(得分:2)
创建一个文件import React, { Component } from 'react';
import { render } from 'react-dom';
import { Button, Modal } from 'react-bootstrap';
import { signin } from './Auth/controllers/authentication';
export default class Login extends Component {
render() {
const { openLogin, closeLogin, login } = this.props;
return (
<div>
<div className="login-corner">
<span className="login" onClick={openLogin}>LOGIN</span>
</div>
<Modal className="modal-dialog" bsSize="small" show={login.login} closeTimeoutMS={150}>
<Modal.Body>
<Modal.Title className="login-title">Login</Modal.Title>
</Modal.Body>
<div className="login-input">
<div className="form-group">
<div className="user-input">
<i className="glyphicon glyphicon-user"></i>
<input type="email" className="form-control" placeholder="Username"/>
</div>
<div className="password-input">
<i className="glyphicon glyphicon-lock"></i>
<input type="password" className="form-control" placeholder="Password"/>
</div>
</div>
</div>
<div className="login-button">
<Button className="btn btn-info" onClick={closeLogin}>Welcome Back!</Button>
</div>
<div className="register-button">
<a className="register-link" ui-sref="register" onClick={closeLogin}>Not a member? Sign up!</a>
</div>
</Modal>
</div>
);
}
}
,然后输入以下内容:
globals.d.ts
现在,您可以在declare interface JSON {
parse<T>(text: string, type: { new (): T }): T;
}
中使用此JSON.parse
重载。
https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html