在TypeScript中为内置对象的方法添加重载

时间:2016-04-11 19:15:27

标签: typescript

我正在使用的库为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;

如何正确使用方法重载扩展内置对象?

1 个答案:

答案 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