შეიძლება არსებული JavaScript ობიექტები გამოიყენოთ ტიპებად TypeScript-ში?


მე მაქვს არსებული JavaScript ობიექტი. მინდა ვიყო ვხმარობ TypeScript-ში როგორც ტიპი, მაგრამ ვერ ვხედავ რაიმე გზას ამის გაკეთებისთვის. მაგალითისთვის, მე მაქვს JavaScript ობიექტის კონსტრუქტორი ასე:

function Canvas2D(canvas)
{
    var context = canvas.getContext("2d");
    this.clear = function() { context.clearRect(canvas.width, canvas.height); }
    // lots more methods follow...
}

ჩემს TypeScript-ში მინდა გამოვაცხადო ცვლადი, რომელიც არის Canvas2D-ის მაგალითი. მე შემიძლია განვსაზღვრო, როგორც ტიპი "ნებისმიერი", მაგრამ ეს არ მაძლევს ავტომატურ შეთავაზებას და ერთგვარად უარყოფს TypeScript-ის გამოყენების უპირატესობებს.

class MyApp
{
    private canvas2d: any;
    // I want this instead
    //private canvas2d: Canvas2D;

    constructor(aCanvas) { this.canvas2d = new Canvas2D(aCanvas); }
}

არის რაიმე გზა ამის გაკეთებისთვის TypeScript-ში?

JavaScript-ში მე ამას შემიძლია გავაკეთო:

var canvas2D = new Canvas2D(aCanvas);

და ის (Visual Studio) მიხვდებოდა, რა ტიპის ობიექტთან ჰქონდა საქმე.

პასუხი #1

დიახ, ეს შესაძლებელია. თქვენ შეგიძლიათ გადატანოთ თქვენი Canvas2D ობიექტი TypeScript კლასში და შეეხოთ ფაილს

/// <reference path="Canvas2D.ts" />

MyApp ფაილის შიგნით.

ან

შეგიძლიათ შექმნათ განსაზღვრული ფაილი (Canvas2D.d.ts), რომელიც განსაზღვრავს Canvas2D კლასის ფორმას და გამოიყენოთ ის ნაცვლად.

/// <reference path="Canvas2D.d.ts" />

მაგალითი :

declare class Canvas2D {
    constructor(elem: HTMLCanvasElement);
    clear();
    // Lots more methods here...
}