getviewbyid nativescript

getviewbyid - ¿Cómo puedo acceder a la API nativa en NativeScript cuando uso Typescript?



nativescript 5 (1)

Cuando creo dos nuevas aplicaciones con tns, una es la versión js normal y la otra es con mecanografiado. Recibo un extraño error en la versión de escritura de tipos cuando intento acceder a una biblioteca nativa.

Cuando creo una función cargada con una console.log (pow (x, y)), funciona bien con la versión js pero la versión mecanografiada falla con este error.

error TS2304: Cannot find name ''pow''.

¿Por qué?

TS:

import { EventData } from "data/observable"; import { Page } from "ui/page"; import { HelloWorldModel } from "./main-view-model"; // Event handler for Page "navigatingTo" event attached in main-page.xml export function navigatingTo(args: EventData) { // Get the event sender var page = <Page>args.object; page.bindingContext = new HelloWorldModel(); } export function loaded() { console.log(''Hello World'') console.log(''pow(2.5, 3) = '', pow(2.5, 3)); }

JS:

var createViewModel = require("./main-view-model").createViewModel; function onNavigatingTo(args) { var page = args.object; page.bindingContext = createViewModel(); } function loaded() { console.log(''hello world'') console.log(''pow(2.5, 3) = '', pow(2.5, 3)); } exports.onNavigatingTo = onNavigatingTo; exports.loaded = loaded;


TypeScript es un lenguaje fuertemente tipado y necesita una definición de tipo explícita para cada variable (por ejemplo, como pow ). En lugar de enviar a any , puede proporcionar archivos de definición generados previamente por NativeScript que le darán la posibilidad de escribir e IntelliSense para las API nativas de Android e iOS.

La última versión de NativeScript por defecto es crear la aplicación sin los archivos de declaración de plataforma ( android17.d.ts para Android e ios.d.ts para iOS) y sin esos archivos, su TypeScript simplemente no conoce las referencias de las API nativas. La razón para no incluir los archivos de definición: son enormemente grandes y se necesitan solo cuando los desarrolladores van a usar el acceso TypeScript (o Angular) + a las API nativas.

La solución:

1.) Instalar los archivos de definición como una dependencia de desarrollador

npm i tns-platform-declarations --save-dev

Esto instalará los archivos de declaración de su plataforma en node_modules / tns-platform-declarations

2.) Cree referencias.d.ts en su directorio principal de aplicaciones y agregue lo siguiente

// SEE the updated paths below

Ahora eres bueno para ir!

ACTUALIZACIÓN (a partir de octubre de 2017: con la instalación de tns-core-modules 3.xx (o superior) y tns-platform-declaations 3.xx (o superior)): el complemento npm ahora tiene una estructura diferente, por lo que estas son las rutas adecuadas (cree el archivo references.d.ts en el directorio raíz y coloque el siguiente)

/// <reference path="./node_modules/tns-platform-declarations/ios/ios.d.ts" /> /// <reference path="./node_modules/tns-platform-declarations/android/android.d.ts" />

Importante : Tu tsconfig.json debería verse así:

{ "compilerOptions": { "module": "commonjs", "target": "es5", "experimentalDecorators": true, "lib": [ "es6", "dom" ] } }