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