NativeScript:增强tns平台声明

NativeScript:增强tns平台声明,第1张

NativeScript:增强tns平台声明

最终,我根本不赞成

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。

希望对其他类似问题有所帮助。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4895055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存