Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJS 5的类型脚本定义_Extjs_Typescript - Fatal编程技术网

ExtJS 5的类型脚本定义

ExtJS 5的类型脚本定义,extjs,typescript,Extjs,Typescript,有人在为ExtJS5编写TypeScript定义吗?我一直在检查“确定键入”,但没有活动: 我开始认真研究这个问题,但发现搜索结果并不令人满意 首先 虽然我找不到任何特定于ExtJS5的东西(很抱歉),但我找到了,它声称使用一个从ExtJS文档开始的过程生成TypeScript声明文件。这些示例以ExtJS4.1为目标,但也许它可以与ExtJS5一起使用。如果是这样,它会解决你的问题。这当然不是一个答案,但可能是一个线索 顺便说一句,上面提到的对话并不适合我。它从一个看似无害的要求SECHHA

有人在为ExtJS5编写TypeScript定义吗?我一直在检查“确定键入”,但没有活动:


我开始认真研究这个问题,但发现搜索结果并不令人满意

首先

虽然我找不到任何特定于ExtJS5的东西(很抱歉),但我找到了,它声称使用一个从ExtJS文档开始的过程生成TypeScript声明文件。这些示例以ExtJS4.1为目标,但也许它可以与ExtJS5一起使用。如果是这样,它会解决你的问题。这当然不是一个答案,但可能是一个线索


顺便说一句,上面提到的对话并不适合我。它从一个看似无害的要求SECHHA考虑潜在的类型脚本提供静态工具。 打字稿

我刚刚发现了TypeScript(),并且 看起来很有希望。有人有机会玩过吗? 我想知道是否有可能产生一个打字脚本 声明文件,用于声明Ext JS和Sencha中的所有类型 触摸框架。我希望有更好的静态分析和工具 支持我的Sencha开发工作

谢谢

以下是Sencha高级论坛经理的回复:

只是让事情变得丑陋的另一件事[打字稿]

[编辑]不管我说了多少次,这个评论显然是一个错误 个人评论,还是个人的。如果你还没和我谈过或者 在推特上跟踪我,我对我的代码和 TypeScript(甚至ES6)的语法很难看

那太残酷了

我个人不认识论坛经理,所以我不想谈论他对打字脚本的特殊偏见。但我确实认为,我可以提供一些见解,解释为什么Sencha的代表可能不支持它的成功。也许这会帮助您理解为什么为ExtJS 5创建一个定义文件对许多人来说可能不是一个高优先级的任务

请注意,我可能是错的,有一个extjs5定义文件还没有被定义为DefinitelyTyped。我的搜索远远没有彻底

TypeScript

。请注意,构造函数是一个函数,它返回一个实例,该实例的状态可能已被其原型的状态修改或专门化:

function Mammal() {
    //...  
}
构造函数的prototype属性恰好是构造函数返回的对象的原型,然后可以使用方法和属性(在ES5 object.defineProperty意义上)进行扩展。不必为构造函数创建的每个实例重新创建原型上声明的成员:

Mammal.prototype = function giveBirth() {
    //...
}
从这个意义上讲,构造函数扮演着类的角色,其原型属性的结构定义了构造函数创建的对象的类型。虽然此模式在ES3和ES5中非常详细,特别是在添加继承所需的额外机制时,但ES6使用此模式定义类的概念。因此,它是TypeScript编译器用来编译类的模式

有关JavaScript中这种形式的经典面向对象编程的更完整的处理方法,以及使经典继承更简洁的技术,请参阅

值得注意的是,类型的概念仅在设计时存在,并且由TypeScript编译器强制执行,以帮助您编写更坚固的代码

ExtJS

在TypeScript出现之前,我已经熟悉Sencha的ExtJS框架所采用的经典继承模型。该模型提供了一种方法,可以使用多个模式(包括模块模式、原型模式和工厂模式)定义类并从它们相应的类型创建实例。如果您是一名ExtJS程序员,您会发现这些模式非常熟悉,但作为参考,请参阅Addy Osmani的相关章节

作为一名纯JavaScript开发人员,这种经典的面向对象编程方法非常强大。它在许多方面与TypeScript编译器使用的经典面向对象编程模型相似,但有一个关键区别。在ExtJS中,类及其类型是框架已知的,因此在运行时存在。ExtJS最棒的地方之一是它模拟了创建类的语法,这与Java或C#中的做法非常相似。但与在TypeScript中指定类的方法相比,它是苍白的

当我第一次被介绍时,我被ExtJS使用的类定义方法迷住了,以至于我创建了一个自己的库,名为。我受到了足够的启发,创建了自己的库,以探索和扩展JavaScript中的类定义,并实现它以供我自己借鉴。如果单击上面的链接,您会注意到该项目已经从类似ExtJS的类系统演变为TypeScript的基类库

为什么要改变

首先,TypeScript提供了一个面向对象编程的模型,它不仅允许我使用熟悉的OOP设计模式,而且还为我提供了一个静态类型系统和所有与之配套的设计时工具。当第一次发现TypeScript(版本0.8)时,我最初的反应是为Classic创建一个类型定义文件,这与为ExtJS创建一个类型定义文件类似(但要简单得多)。在我完成这项任务之后,生成的库的语法是一场彻底的灾难!我想探讨出了什么问题,我将用一个来自ExtJS的简单示例来说明

此代码取自上述讨论,看起来像一个标准的ExtJS类定义:

Ext.define('WebApp.model.RenderableRecord', {
    extend: 'Ext.data.Model',
    idPropert: 'id',

    isRenderableRecord : true,

    fields: [
        { name: 'id', type: 'string' },
        { name: 'name', type: 'string' },
        {
            name: 'renderable',
            convert: function (val, model) {return val;}
        },
    ],

    renderItems: function (renderer: Function) {
        var me = this;
        return function (config: Object) {
            renderer(me.get('renderable'), config);
        }
    },

});
考虑上面原型定义的接口。如果需要在TypeScript中进行静态键入,可以创建一个
module WebApp {
  module model {
    export interface RenderableRecord extends Ext.data.Model {
      idPropert: string;
      isRenderableRecord: boolean;
      fields: Array<Field>;
      renderedItems(renderer: Function);
    }

    //Assume Ext.data.Model and Field are defined already
    //and that the Field interface looks something like this:
    export interface Field {
      name: string;
      type: string;
      convert: Function;
    }
  }
}