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

时间:2019-08-16 16:59:25

标签: nativescript tslint nativescript-angular

我正在使用nativescript angular。我有一个名为SomeClass的类,可以分别访问iOS和Android的本机API。

我写了两个文件:

someclass.android.ts

async/await

someclass.ios.ts

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

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

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

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

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

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

使用此设置,一切都可以在iOS和Android上完美运行,但是出现以下错误

  

错误TS2307:找不到模块'./../ shared-code / someclass'。

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

谢谢

1 个答案:

答案 0 :(得分:0)

这是解决方案:

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

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

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,不带任何扩展名。 这将解决build和tslint错误。