javascript文件的Typescript声明

时间:2017-09-29 22:30:31

标签: typescript typescript-typings

我使用的是混合了javascript和打字稿的项目。 可以使用 - declare module轻松创建模块的声明文件。但是如何在当前文件夹中为javascript文件创建声明?

前 -

player.js -
var Player = function() {};
Player.prototype.validate = function() {};

如何创建声明以便我可以在typescript中扩展它。我想做这样的事情 -

player.ts -
let Player = require('./player');
Player.prototype.login = function() {
    this.validate();
}

我知道上面的代码可以通过设置播放器类型来实现,但我不能打字。

3 个答案:

答案 0 :(得分:1)

TypeScript不了解原型语法/构造函数:没有intellisense。它更喜欢ES6课程。

JavaScript Player构造函数等效于此TypeScript类定义:

// -- player.d.ts --
declare class Player {
  validate(): void;
}

然后,要向Player类添加方法,有几个选项:

  1. TypeScript惯用方法越多:类继承或类组合
  2. 继续使用TypeScript中的原型语法并仍然获得intellisense:facade界面
  3. 代码示例:

    // -- authenticated-player.ts --
    import { Player } from './player'; 
    
    // Option #1a: class inheritance
    class AuthenticablePlayer extends Player {
      login() {
        this.validate();
      }
    }
    
    const p1a = new AuthenticablePlayer();
    p1a.login();
    
    // Option #1b: class composition + delegation
    class AuthenticablePlayerB {
      private player = new Player(); 
    
      login() {
        this.validate();
      }
    
      validate() {
        this.player.validate();
      }
    }
    
    const p1b = new AuthenticablePlayerB();
    p1b.login();
    

    -

    // Option #2: prototype extension + facade interface + type assertion
    const Player: any = require('./player');
    
    Player.prototype.login = function() {
      this.validate();
    }
    
    interface IPlayer {
      login(): void;
      validate(): void;
    }
    
    function createPlayer(): IPlayer {
      return new Player();
    }
    
    const p2 = createPlayer();
    p2.login();
    

答案 1 :(得分:0)

您可以在TypeScript文件中创建界面,并将其设置为播放器的类型。



interface IPlayer {
  validate();
}

let Player: IPlayer = require('./player');

Player.prototype.login = function() {
    this.validate();
}




答案 2 :(得分:0)

在此扩展Sabbir的答案(评论空间不足)

interface IPlayer { 
  validate(): void
  login():void
}

旧js代码

var Player = function () { }
Player.prototype.validate = function() {}

在ts项目中使用

// import / require here, left out for brevity
Player.prototype.login = function() {
    this.validate()
}

创建一个播放器 - 登录并验证现在有自动完成

let p: IPlayer = new Player()
p.login()
p.validate()