Как использовать someClass.android.ts и someClass.ios.ts без ошибок

Я использую nativescript angular. У меня есть класс SomeClass, который обращается к собственному API iOS и Android отдельно.

Я написал два файла:

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, но я получаю следующую ошибку

ошибка TS2307: не удается найти модуль ./../shared-code/someclass.

Вы знаете, как указать nativescript / tslint учитывать файлы .android и .ios и не отображать эту ошибку?

Спасибо


person Mick Morely    schedule 16.08.2019    source источник
comment
Добавьте объявления tyepscript в index.d.ts файл, которые будут открывать методы из некоторого класса.   -  person Manoj    schedule 16.08.2019
comment
Я создал подпапку ./../shared-code/someClass/ и добавил index.d.ts, раскрывающий методы в someClass, и скопировал в нее someclass.android.ts и someclass.ios.ts. Все та же ошибка. Не могли бы вы подробнее рассказать об этом?   -  person Mick Morely    schedule 16.08.2019
comment
В index.d.ts я добавил следующее: export declare class SomeClass {someFunction (): void; } Нет ошибок ts, но при создании приложения возникла следующая ошибка: ERROR in ./app/app.component.ts Module not found: Error: Can't resolve './../shared-code/someclass' in ' / src / app / 'Есть идеи?   -  person Mick Morely    schedule 16.08.2019
comment
@Manoj - спасибо за вашу помощь. Пишу подробное решение.   -  person Mick Morely    schedule 16.08.2019


Ответы (1)


Вот решение:

Наряду с '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 без каких-либо расширений. Это решит ошибки сборки и tslint.

person Mick Morely    schedule 16.08.2019