NativeScript:增强tns平台声明

如何解决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。

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

解决方法

在我的NativeScript项目中,我想包含RecyclerViewAndroid支持库中的内容。我将依赖项包括在app/App_Resources/Android/app.gradle

// Uncomment to add recyclerview-v7 dependency
dependencies {
    compile 'com.android.support:recyclerview-v7:+'
}

从git issue#2295和其他相关问题中,我读到tns-platform-declarations可以提供本机android / ios库的定义文件的内容。所以我安装了它们并遵循了tns平台声明文档

我想编译以下示例代码段:

import { ContentView } from "ui/content-view";

declare var android: any;

export class OptimizedListView extends ContentView {

  private _android: android.support.v7.widget.RecyclerView;

  public _createUI() {
    this._android = new android.support.v7.widget.RecyclerView(this._context);
  }

};

声明var android以上类似内容可清理的第二个参考RecyclerView。但是,仍然存在以下有关RecyclerView的顶级参考错误:

消息:“名称空间'android.support.v7.widget'没有导出的成员’RecyclerView’。”

我也尝试声明RecyclerView类没有成功:

export declare class RecyclerView extends ContentView {}

我知道事实,tns-platform-declarations直到为止都有定义android.support.v7.widget

“ noEmitOnError”设置为false的解决方法感觉不正确。

那么,如何在android.support.v7.widget.RecyclerView没有编译问题的情况下将此声明扩展到?

版本:

“ nativescript-dev-typescript”:“ ^ 0.3.2”
“ tns平台声明”:“ ^ 2.4.0-2016-09-28-1”
“ typescript”:“ ^ 2.1.1”
“ tns-core-modules”:“下一个”

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?