Nativescript:是否可以通过typescript访问android sdk函数/类?

时间:2016-11-09 11:05:09

标签: typescript nativescript

我们说我有这个主要组成部分:

import { Component } from "@angular/core";

@Component({
    selector: "my-app",
    templateUrl: "./layouts/main-layout.html"
})
export class AppComponent {

    constructor(

    ){}

    ngAfterViewInit() {
        //console.log( com.google.android.gms.maps.CameraUpdateFactory );
    }

}

如何在app.component.ts中调用注释掉的函数?

因为它给了我"com" not found错误。

我在dependencies { compile 'com.google.android.gms:play-services-maps:9.8.0' }文件中添加了App_Resources/Android/app.gradle

我还检查了nativescript-google-maps-sdk插件是如何做到的。它似乎以同样的方式 - 它有它的'自己的nativescript-google-maps-sdk/platforms/android/include.gradle文件,它还定义了本地android sdk中的google play服务地图,并在nativescript-google-maps-sdk/map-view.android.js我看到它正在使用这样的命令而没有问题:

var cameraUpdate = com.google.android.gms.maps.CameraUpdateFactory.newCameraPosition( cameraPosition );

非常感谢任何见解。

2 个答案:

答案 0 :(得分:4)

您首先需要了解错误发生的原因 - 缺少任何com的TypeScript定义以及之后发生的事情。 com不是TypeScript中的有效识别对象,也不是JavaScript,因此您需要

A)(BAD)指示TypeScript编译器不要抱怨缺少定义,因为你知道的更好,你知道com.google.android.gms.maps.CameraUpdateFactory是一个有效的对象。您在noEmitOnErrors

中停用了tsconfig.json

B)(GOOD)提供打字(通常以.d.ts的形式出现)以及#34;熟悉" TSC与外星人阶级。

declare module com {
    export module google {
        export module android {
            export module gms {
                export module maps {
                    export class CameraUpdateFactory {
                        public static newCameraPosition(param0: any): any
                    }
                }
            }
        }
    }
}

let cameraUpdate: any = com.google.android.gms.maps.CameraUpdateFactory.newCameraPosition;

如果您无法描述整个命名空间,请使用let com: any。可以为android / java库自动生成类型,但TypeScript / JavaScript中存在一定的限制,目前阻止我们将android android库类型与android.sdk和支持库类型一起导出。

答案 1 :(得分:3)

将此添加到您的文件中 declare var com:any; 并且还读了这个 How can I access Native api in NativeScript when I use Typescript