2016-05-30 8 views
14

Kiedy tworzę dwie nowe aplikacje z tns, jedna jest zwykłą wersją js, a druga jest z maszynopisem. Dostaję dziwny błąd w wersji maszynopisu, gdy próbuję uzyskać dostęp do biblioteki natywnej.Jak uzyskać dostęp do Natywnego interfejsu API w NativeScript, gdy używam Typescript

Kiedy tworzę załadowaną funkcję z console.log (pow (x, y)), działa dobrze z wersją js, ale wersja z maszynopisami zawiesza się z tym błędem.

error TS2304: Cannot find name 'pow'. 

Dlaczego?

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; 

Odpowiedz

28

Najnowsze wydanie NativeScript domyślnie jest tworzenie aplikacji bez plików deklaracji platforma (android17.d.ts dla Androida i ios.d.ts dla iOS) i bez tych plików Twój TypeScript po prostu nie wie o referencjach natywnych API. Powód - te pliki są dość duże i są potrzebne tylko wtedy, gdy programiści będą używać natywnego API TS +.

Rozwiązanie:

1.) zainstalować pliki definicji

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

Spowoduje to zainstalowanie platformy plików declaraion w node_modules/TNS-platform-deklaracje

2.) otwarte references.d.ts w głównym katalogu aplikacji i dodać następujący

// SEE the updated paths below 

Teraz możesz iść!

Update (od Octomber 2017 - z instalacją TNS-core-modułów TNS 3.xx i platformami-deklaracji 3.xx) Wtyczka npm teraz ma inną strukturę, tak że są one odpowiednie ścieżki (tworzenie references.d.ts plik w katalogu głównym i umieść jeden poniżej)

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

Ważne: Twój tsconfig.json powinna wyglądać następująco:

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

Brzmi logicznie - jestem nowy w maszynopisie i NativeScript. Dziękuję Ci bardzo!! – Aron

+3

dla ios ścieżka znajduje się w podfolderze o nazwie 'ios'. '' '/// <ścieżka odniesienia =" ../ node_modules/tns-platform-deklaracje/tns-core-modules/ios/ios.d.ts "/>' '' – Rjk

+2

Dzięki @Rjk. Ale teraz mam "Odniesienie obejmuje pliki poza projektem". Co robię źle? – friedi

Powiązane problemy