Nativescript:是否可以通过 typescript 访问 android sdk function/class?

Nativescript: is it possible to access android sdk function/class through typescript?

假设我有这个主要成分:

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 错误。

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

我也检查了 nativescript-google-maps-sdk 插件是如何做到的。它似乎以相同的方式进行 - 它有自己的 nativescript-google-maps-sdk/platforms/android/include.gradle 文件,其中还定义了来自本地 android sdk 和 nativescript-google-maps-sdk/map-view.android.js 的 google 播放服务地图我看到它使用这样的命令没有问题:

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

非常感谢任何见解。

将此添加到您的文件中 declare var com:any; 并阅读此

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

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

中禁用 noEmitOnErrors

B) (GOOD) 与外星人 class 一起向 "acquaint" TSC 提供打字(它们通常以 .d.ts 的形式出现)。

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 中存在一定的限制,目前阻止我们将 google android 库类型与 android.sdk 一起导出并支持库类型。