Как написать определение класса Typescript для модуля

#javascript #node.js #canvas #typescript

#javascript #node.js #холст #typescript

Вопрос:

Я хочу написать файл определения Typescript (.d.ts) для этого модуля https://www.npmjs.com/package/canvas

Итак, вот с чего я начал:

 declare module Canvas {
    class Canvas {
        constructor(width: number, height: number);
    }
}

declare module "canvas" {
    export = Canvas;
} 
  

Это работает, когда я импортирую и вызываю модуль следующим образом:

 /// <reference path="./canvas.d.ts" />
import * as Canvas from "canvas";
new Canvas.Canvas(32, 32)
  

Тем не менее, я хочу вызвать класс следующим образом:

 new Canvas(32, 32)
  

Я также хочу добавить в класс две вещи:

  • Он должен возвращать an HTMLCanvasElement , чтобы он мог работать так же, как обычный Canvas api
  • Я также хочу добавить .Свойство изображения для модуля, которое доступно без создания класса.

Вот пример того, чего я жду:

 import * as Canvas from "canvas";
var Image  = Canvas.Image;
var canvas = new Canvas(32, 32);
var ctx    = canvas.getContext('2d');

ctx.drawImage and every regular functions...
[...]
  

Я также хочу добавить необязательный параметр обратного canvas.toDataURL() вызова.

Как я могу это сделать?

Ответ №1:

Что-то вроде этого будет работать для создания экземпляра класса без необходимости указывать имя модуля каждый раз, когда вы используете new:

 /// <reference path="./canvas.d.ts" />
import Canvas1 = Canvas.Canvas;

var canvas = new Canvas1(32, 32);