typescript复制函数并保留类型



我使用的是带有typescrtip的p5.js。

在p5.js中,您有一个p5对象,可以在其中调用

let p5: P5; // it is assigned somwhere else but this does not matter for this question
p5.createCanves(400, 400);
p5.background("#fff");
p5.line(0, 0, 400, 400);

从白色罐子的左上角到右下角画一条线。

现在我尝试在前面没有p5.的情况下调用这些方法。

到目前为止,我已经尝试过这个:

let p5: P5;
const createCanvas = p5.createCanvas;
const background = p5.background;
const line = p5.line;
// or
const createCanvas = (() => { return p.createCanvas; })();
const background = (() => { return p.background; })();
const line = (() => { return p.line; })();

但是p5.js不允许在调用方法p5.setup之前访问这些方法,因此我不允许将这些方法分配给变量。

接下来,我试着只调用方法:

const createCanvas = (x: number, y: number) => p5.createCanvas(x, y);
const background = (value: string) => p5.background(value);
const line = (x1: number, y1: number, x2: number, y2: number) => p5.line(x1, y1, x2, y2);

但如果我必须对每个函数都这样做,并且我不能复制重载,那么这个方法就是另一种方法。例如,background方法有以下6个签名:

background(color: Color)
background(colorstring: string, a?: number | undefined)
background(gray: number, a?: number | undefined)
background(v1: number, v2: number, v3: number, a?: number | undefined)
background(values: number[])
background(image: Image, a?: number | undefined)

我不知道如何保留Types并将其分配给一个变量。如果有办法,请发布答案。我的建议是

const backgroud = (color: Color)
(colorstring: string, a?: number | undefined)
(gray: number, a?: number | undefined)
(v1: number, v2: number, v3: number, a?: number | undefined)
(values: number[])
(image: Image, a?: number | undefined) => {
if(color) return p5.background(color)
if(colorstring) return p5.background(colorstring, number)
if(gray) return p5.background(gray, a)
if(v1) return p5.background(v1, v2, v3, a)
if(values) return p5.background(values)
if(image) return p5.background(image, a)
}

但这显然不是有效的打字

我还试图以某种方式导入其他文件中的方法

import {p5.*} from "./index"

但据我所知,这是不可能的

有没有一个更容易的方法来解决我的问题,或者我应该放弃,写下上帝的名字p5.

有没有办法将这6个签名组合成一个变量?

背景函数

矩形函数

您从库中获取一个类型,并将其分配给代理箭头函数。

最新更新