| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [View Raw Code] [Original HTTPS Page] |
There are several major scenarios when writing modules:
Declaration file (foo.d.ts):
declare module "foo"{
function a();
class Foo {
public var1: number;
}
}Implementation file (foo.ts):
import definition = require("foo");
export function a(){
// do somethign here
}
// require the definition and put implements clause to ensure API consistency between the declaration and implementation
export class Foo implements definition.Foo {
public var1: number;
}Declaration file (foo.d.ts):
declare module "foo"{
class Foo {
public running: number;
public start(): void;
public stop(): void;
}
}Android implementation file (foo.android.ts):
import definition = require("foo");
// require the definition and put implements clause to ensure API consistency between the declaration and implementation
export class Foo implements definition.Foo {
public running: number;
public start(): void {
// Call android APIs - e.g. android.os.SystemClock.[xxx]
this.running = true;
}
public stop(): void {
// Call android APIs - e.g. android.os.SystemClock.[xxx]
this.running = false;
}
}iOS implementation file (foo.ios.ts):
import definition = require("foo");
// require the definition and put implements clause to ensure API consistency between the declaration and implementation
export class Foo implements definition.Foo {
public running: number;
public start(): void {
// Call iOS APIs - e.g. Foundation.NSObject.[xxx]
this.running = true;
}
public stop(): void {
// Call iOS APIs - e.g. Foundation.NSObject.[xxx]
this.running = false;
}
}In this case we will need to reuse the common JavaScript code and to split the implementation only for the platform specific native APIs. There are two different approaches here:
Declaration file (foo.d.ts):
declare module "foo"{
class Foo {
public running: number;
public start(): void;
public stop(): void;
}
}Common implementation file (foo-common.ts):
import definition = require("foo");
// require the definition and put implements clause to ensure API consistency between the declaration and implementation
export class Foo implements definition.Foo {
public running: number;
public start(): void {
this.running = true;
// add some common implementation here
}
public stop(): void {
this.running = false;
// add some common implementation here
}
}Android implementation file (foo.android.ts):
import common = require("foo-common");
// require the common file and extend the base common implementation
export class Foo extends common.Foo {
public start(): void {
// call the base method which does the common job
super.start();
// add platform-specific implementation - e.g. call android.os.SystemClock.[xxx]
}
public stop(): void {
// call the base method which does the common job
super.stop();
// add platform-specific implementation - e.g. call android.os.SystemClock.[xxx]
}
}iOS implementation file (foo.ios.ts):
import common = require("foo-common");
// require the common file and extend the base common implementation
export class Foo extends common.Foo {
public start(): void {
// call the base method which does the common job
super.start();
// add platform-specific implementation - e.g. call Foundation.NSObject.[xxx]
}
public stop(): void {
// call the base method which does the common job
super.stop();
// add platform-specific implementation - e.g. call Foundation.NSObject.[xxx]
}
}Declaration file (foo.d.ts):
declare module "foo"{
class Foo {
public running: number;
public start(): void;
public stop(): void;
}
}Native Implementation Declaration file (foo-native.d.ts):
//@private
// The above statement marks this definition as private so that it is not visible to the users
declare module "foo-native"{
function startNative();
function stopNative();
}Android Native Implementation file (foo-native.android.ts):
export function startNative(){
// call native code here
}
export function stopNative(){
// call native code here
}iOS Native Implementation file (foo-native.ios.ts):
export function startNative(){
// call native code here
}
export function stopNative(){
// call native code here
}Common implementation file (foo.ts):
import definition = require("foo");
import fooNative = require("foo-native");
// require the definition and put implements clause to ensure API consistency between the declaration and implementation
export class Foo implements definition.Foo {
public running: number;
public start(): void {
this.running = true;
// do the native call through the Facade
fooNative.startNative();
}
public stop(): void {
this.running = false;
// do the native call through the Facade
fooNative.stopNative();
}
}| Back | FazBrowse Home | New Git URL |