如何正确使用 someClass.android.ts 和 someClass.ios.ts

How to use someClass.android.ts and someClass.ios.ts without errors

我正在使用 nativescript angular。我有一个名为 SomeClass 的 class,它分别访问 iOS 和 Android 的原生 API。

我写了两个文件:

someclass.android.ts

export class SomeClass {
    someFunction() {
        if(isAndroid) {
            // do some android specific code
        }
    }               
}

someclass.ios.ts

export class SomeClass {
    someFunction() {
        if(isIOS) {
            // do some ios specific code
        }
    }               
}

现在,在 app.component.ts 中,我像这样使用 SomeClass:

import { SomeClass } from './../shared-code/someclass';

没有 .android.ts 或 .ios.ts,使 nativescript 能够根据 运行 平台选择正确的文件。

然后在代码中,我像这样使用 SomeFunction:

...
const someClass = new SomeClass();
someClass.someFunction();
...

使用此设置,在 iOS 和 Android 上一切正常,但出现以下错误

error TS2307: Cannot find module './../shared-code/someclass'.

您知道如何告诉 nativescript/tslint 考虑 .android 和 .ios 文件而不显示此错误吗?

谢谢

解决方法如下:

除了 'someclass.ios.ts''someclass.android.ts',创建一个定义文件并将其命名为 'someclass.d.ts'(不是 index.d.ts)。无需将文件放在单独的文件夹中。

someclass.d.ts中,export declare中的class是这样的:

export declare class SomeClass {
    /**
     * someFunction, is a function that does this and that (description)
     */
    someFunction(): void;

}

然后,您可以像这样从另一个文件中使用它:

app.component.ts中:

import { SomeClass } from './../shared-code/someclass';

记得使用不带任何扩展名的 /someclass。 这将解决构建和 tslint 错误。