我正在尝试使用TypeScript构建一个类似于Max,Grasshopper或Antimony的图形编程编辑器。
基本思想是块表示左侧输入和右侧输出的功能,您可以将输入和输出连接到边缘。
我现在面临的挑战是,我想要一个类型安全的静态定义块以及一些运行时类型内省,以防止用户使用类型连接输入和输出那些不匹配。
最简单的起点是将块定义为函数。例如:
function AdditionBlock(x: number, y: number): number {
return x + y
}
然而,这种方法存在一些问题。
我尝试过一点点改进这种方法,但我还是没能把它拉下来:
我为内在类型系统创建了自己的别名,以便我可以在运行时使用instanceof
。
class IntrinsicType<ActualType> {}
const NumberType = new IntrinsicType<number>()
const StringType = new IntrinsicType<string>()
然后我创建了一个具有静态属性的类,用于定义输入,输出和求值函数:
class AdditionBlock {
static inputs: [
{ name: "x"; type: NumberType },
{ name: "y"; type: NumberType }
]
static outputs: [{ name: "sum"; type: NumberType }]
static evaluate(x: number, y: number): number {
return x + y
}
}
但是,我已经非常高兴我无法将输入和输出类型与评估定义相连接。
我认为解决我问题的方法是,如果有一些方法可以在运行时自省函数的类型定义,即使它只是检查instanceof
类的简单。
我希望一切都有道理 - 如果我要澄清任何事情,请告诉我。