最终,我根本不赞成
tns-platform-declarations,因为性能非常糟糕(特别是如果您的开发机中的RAM小于等于8GB)。
我的解决方案是定义一个自己的
my-typings.d.ts文件(例如,在项目根目录中),在其中定义扩展类型
RecyclerView。随着tsconfig.json违约应该自动被追上了tsc。否则可以添加
exclude/include或files表达式。
然后,您可以放置一个
/// <reference path="path/to/RecyclerView/file.d.ts" />内部,以便ambient global namespaceTypescript编译器可以找到以下内容。
declare namespace android { namespace view { namespace ViewGroup { namespace LayoutParams { const MATCH_PARENT; const WRAP_CONTENT; } } class ViewGroup { } } namespace support.v7.widget { namespace RecyclerView { type AdapterImpl = { onCreateViewHolder(parent: android.view.ViewGroup, viewType: number): ViewHolder; onBindViewHolder(holder: android.support.v7.widget.RecyclerView.ViewHolder, position: number): void; getItemCount(): number }; class Adapter { static extend(AdapterImpl): { new () } } class LayoutParams { constructor(width: any, height: any); } class ViewHolder { static extend: any; } } class RecyclerView { constructor(context: any); setAdapter(Adapter): void; setLayoutManager(LinearLayoutManager): void; } class LinearLayoutManager { constructor(context: any); } }}
基本上,名称空间可用于模拟嵌套的对象属性(例如android.view.xxx)。如果内部类是用Java定义的(Typescript似乎禁止嵌套class语句),这也是这种方式。
在实际使用类型的情况下,我还必须定义一个与名称空间同名的类android.view.ViewGroup。否则你会得到错误
没有出口会员xxx
,即使使用显式声明了类类型export(也没有必要,因为已经全局声明了名称空间)。
对于使用扩展本机Java类型的特殊情况extend,我为相关类定义了一个静态方法,例如
static extend(AdapterImpl): { new () },其返回类型可以使用实例化new。
希望对其他类似问题有所帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)