我使用的是混合了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();
}
我知道上面的代码可以通过设置播放器类型来实现,但我不能打字。
答案 0 :(得分:1)
TypeScript不了解原型语法/构造函数:没有intellisense。它更喜欢ES6课程。
JavaScript Player
构造函数等效于此TypeScript类定义:
// -- player.d.ts --
declare class Player {
validate(): void;
}
然后,要向Player
类添加方法,有几个选项:
代码示例:
// -- 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()