Допустим, у меня есть этот основной компонент:

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, в котором он также определяет карты сервисов Google Play из локального SDK для Android, а в nativescript-google-maps-sdk/map-view.android.js я вижу, что он использует такую ​​команду без проблем:

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

Любые идеи очень ценятся.

0
Starwave 9 Ноя 2016 в 14:05

2 ответа

Лучший ответ

Добавить это в свой файл declare var com:any; а также прочтите это Как мне получить доступ к Native api в NativeScript когда я использую Typescript

3
Community 23 Май 2017 в 12:13

Сначала вам нужно понять, почему возникает ошибка - отсутствуют определения TypeScript для любого com и того, что появляется после. com не является допустимым распознанным объектом ни в TypeScript, ни в JavaScript, поэтому вам необходимо либо

A) (BAD) проинструктируйте компилятор TypeScript не жаловаться на отсутствие определений, потому что вы знаете лучше, вы знаете, что com.google.android.gms.maps.CameraUpdateFactory является допустимым объектом. Вы отключаете noEmitOnErrors в tsconfig.json

B) (ХОРОШО) предоставить типизацию (обычно они имеют формат .d.ts), чтобы «познакомить» 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 есть определенное ограничение, которое в настоящее время не позволяет нам экспортировать типизацию библиотеки google android вместе с android.sdk и поддерживать типизацию библиотеки.

4
pkanev 9 Ноя 2016 в 11:51