gpt4 book ai didi

javascript - 需要将 fabricjs.d.ts 与 TypeScript 结合使用的示例

转载 作者:数据小太阳 更新时间:2023-10-29 05:39:15 25 4
gpt4 key购买 nike

我在尝试转换为使用 TypeScript 的项目中使用 fabricjs,但我不知道如何使用它。以前我会通过执行以下操作来创建自己的自定义对象:

my.namespace.Control = fabric.util.createClass(fabric.Object, {
id: "",
type: 'Control',
color: "#000000",
...
});

在我的新项目中,我安装了来自 here 的 TypeDefinition 文件。但我不知道我应该如何使用它?

查看 .d.ts 文件,fabric.Object 似乎不是函数,因此不允许传递给 createClass,并且 createClass 本身返回 void,因此我无法将值分配给 a变量。

即使所有这些都有效,我应该如何格式化它才能使其以 TypeScript 方式工作?即,我导出什么以便可以将其导入到需要 Control 类的其他地方?

任何人实际上都有这样做的例子吗?

最佳答案

您可以只定义一个扩展结构类的 typescript 类。

export interface IMindObjectOptions {
item: IMindItem;
}

export interface IMindExpanderOptions extends IMindObjectOptions {
x: number;
y: number;
radius: number;
isExpanded: boolean;
}

export class MindExpander extends fabric.Circle implements IMindObjectOptions {

public constructor(options: IMindExpanderOptions) {
const circleOptions: ICircleOptions = {
originX: "center",
originY: "center",
left: options.x,
top: options.y,
radius: options.radius,
stroke: "#000000",
fill: options.isExpanded ? "#00FFFF": "#00FF00",
selectable: false
};
super(circleOptions);
this.item = options.item;
}

public readonly item: IMindItem;
}

!!!上面的代码在浏览器中运行良好,但在 nodejs 环境中运行不正常。


要在 nodejs 环境中工作,例如在没有浏览器的情况下运行单元测试,您需要:

import {assert} from "chai";
import * as f from 'fabric';
import {ITextOptions} from "fabric";

declare function require(s: string): any;
declare const __dirname: string;

const fabric = require("fabric").fabric;

interface ITextConstructor {
new(text: string, options: ITextOptions): f.Text;
}
function getTextConstructor(): ITextConstructor {
return fabric.Text;
}

describe("nodejs setup", function () {
it("fabric is imported correctly", function () {
const x = fabric.Text as f.Text;
assert.equal(typeof x, "function");
});
it("fabric class is extensible", function () {
class SubText extends getTextConstructor() {
public constructor(text: string, options: fabric.ITextOptions) {
super(text, options);
}
}

const c = new SubText("Hello", {left: 100, top: 100});
assert.equal(c.text, "Hello");
assert.isNotNull(c);
});
});

关于javascript - 需要将 fabricjs.d.ts 与 TypeScript 结合使用的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33596408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com