打字稿运行时类型检查

时间:2017-07-08 19:29:43

标签: typescript graphical-programming graphical-language

我正在尝试使用TypeScript构建一个类似于MaxGrasshopperAntimony的图形编程编辑器。

基本思想是块表示左侧输入和右侧输出的功能,您可以将输入和输出连接到边缘。

我现在面临的挑战是,我想要一个类型安全的静态定义块以及一些运行时类型内省,以防止用户使用类型连接输入和输出那些不匹配。

最简单的起点是将块定义为函数。例如:

function AdditionBlock(x: number, y: number): number {
    return x + y
}

然而,这种方法存在一些问题。

  1. 如何为块上的每个输入/输出生成标签?
  2. 如何在运行时验证用户是否将正确的类型附加到此块的其中一个输入?
  3. 我尝试过一点点改进这种方法,但我还是没能把它拉下来:

    我为内在类型系统创建了自己的别名,以便我可以在运行时使用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类的简单。

    我希望一切都有道理 - 如果我要澄清任何事情,请告诉我。

0 个答案:

没有答案