网站搜索

如何将 WinJS 和 Typescript 一起使用?案例:WinJS 类与 Typescript 类


在 WinJS 中,我这样声明类:

WinJS.Namespace.define('MyNamespace', {
    MyClass: WinJS.Class.define(function ctor() {
        //constructor
    },
    {
        //instance members
    },
    {
        //static members
    })
});

但是在 TypeScript 中我使用:

module MyNamespace {
    class MyClass {
        constructor() {

        }
    }
}

所以,我想在 WinJS 项目中使用 Typescript 的 require/import 行为。最好的方法是什么?

答案#1

如果你打算使用 TypeScript,那么你应该使用 TypeScript 的类/接口/模块。这将使你能够获得 TypeScript 提供的所有静态类型的好处。

注意:你仍然可以通过 WinJS.Class 获得这些好处,但你需要为类创建一个接口,然后可以用它来告诉 TypeScript 编译器类型。这会更明确,但你可能很容易在某些地方忘记这样做,从而错过类型带来的额外好处。

答案#2

请参阅 WinJS.Utilities.requireSupportedForProcessing 。根据这个,您可以使用经典的 TypeScript 模块和类定义。例如:

module AnyModule
{
  export class AnyClass
  {
    constructor()
    {

    }

    public AnyMethod()
    {
    }
  }
}

然后通过调用 WinJS.Utilities.markSupportedForProcessing,将此类(实际上是函数)标记为在声明性代码中处理。经过这个简单的修改后:

module AnyModule
{
  export class AnyClass
  {
    constructor()
    {

    }

    public AnyMethod()
    {
    }
  }
  WinJS.Utilities.markSupportedForProcessing(AnyClass);
}

你可以用这种方式来使用经典函数:

module AnyModule
{
  function AnyFunc()
  {
  }
  WinJS.Utilities.markSupportedForProcessing(AnyFunc);
}

可以调用 WinJS.Utilities.requireSupportedForProcessing 方法来验证注册。
如果你在声明性调用中不需要使用该类或函数,那么可以省略调用 WinJS.Utilities.markSupportedForProcessing(...).