2016-05-30 13 views
14

'u kullanırken NativeScript'te Native api'ye nasıl erişebilirim? Tns ile iki yeni uygulama oluşturduğumda, bir tane normal js sürümü ve bir tanesi de typescript'tir. Bir yerel kitaplığa erişmeye çalıştığımda yazı tipi sürümünde tuhaf bir hata alıyorum.Türleri

Bir console.log (pow (x, y)) ile yüklü bir işlev oluşturduğumda, js sürümü ile iyi çalışır, ancak bu hata ile yazı tipi sürümü çöküyor.

error TS2304: Cannot find name 'pow'. 

Neden?

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:

varsayılan olarak NativeScript son sürümü platformu beyan dosyaları olmadan app (yaratıyor
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; 

cevap

28

android17.d.ts Android ve için iOS için ios.d.ts) ve bu dosyalar olmadan, TypeScript'iniz yerel API'lar referanslarını bilmez. Nedeni - bu dosyalar oldukça büyüktür ve yalnızca geliştiriciler TS + native API kullanacaklarsa gereklidir.

çözüm:

1.) yüklemek tanım dosyalarını

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

Bu node_modules daki platformu Beyannamesinin dosyalarını yükler/tns platform-beyanlar

2.) açık references.d.ts ana uygulama dizinine ve ekleyin ekleyin

// SEE the updated paths below 

Şimdi gitmeye hazırsınız!

GÜNCELLEME (Octomber 2017 olarak - yükleme tns çekirdekli modüller 3.xx ve TNS-platform beyanları 3.xx ile): bu, uygun yollar vardır, böylece NPM eklentisi artık farklı bir yapıya sahiptir (oluşturma references.d.ts kök dizininde dosya ve koyun aşağıda bir)

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

Önemli: Sizin tsconfig.json bu gibi görünmelidir:

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

Mantıklı geliyor - typescript ve NativeScript konusunda yeniyim. Çok teşekkür ederim!! Ios için – Aron

+3

yolu "ios" adı verilen bir alt klasördedir. '' /// '' ' – Rjk

+2

Teşekkürler @Rjk. Ama şimdi "Referans, projenin dışındaki dosyaları içerir". Ne yapıyorum yanlış? – friedi