NativeScript+TypeScript를 사용하여 정의되지 않은 Java의 클래스를 호출하려면

NativeScript에서 Android의 표준 SDK는 설치tns-platform-declarations를 통해 호출할 수 있지만 표준 SDK가 아닌 경우 오류가 발생합니다.
예컨대
com.google.firebase.iid.FirebaseInstanceId.getInstance().getToken();
사용하고 싶습니다.IDE 등으로 직접 기술하면...

"Canot find name'com"오류가 발생했습니다.
NativeScript에서는 실행 시 모든 Java API를 호출할 수 있지만 TypeScript에서 컴파일 오류가 발생합니다.이럴 때는 다음 순서에 따라 사용할 수 있다.

포장재 선언 및 사용(손쉽게 사용하려는 경우)

declare let com:any;
그게 다야.com 패키지는 컴파일 검사를 통과하기 위해ny형으로 성명될 것입니다.Type Script 검사 같은 건 필요 없으니까 바로 사용하고 싶어요!이럴 때 추천.저도 자주 씁니다.그러나 이후 설명한 바와 같이 다소 위험성이 있으므로 하고 있는 일을 이해한 후 사용하십시오.

TypeScript의 정의 파일을 만듭니다.


firebase.d.ts

declare module com {
    module google {
        module firebase {
            module iid {
                export class FirebaseInstanceId {
                    static getInstance(): any;
                }
            }
        }
    }
}
module 정의의 플러그인에 이름 공간을 설명하고 사용할 방법 정의 (getInstance) 를 추가했습니다.반환 값을ny로 설정하여 함수의 반환 값인 TypeScript에 대한 확인이 유효하지 않습니다.

정의 파일 불러오기


프로젝트 노선의references입니다.d.ts에 다음 정의를 추가합니다.
references.d.ts
/// <reference path="./firebase.d.ts" />

호출


준비됐습니다.
다음과 같이 호출할 수 있습니다.
let refreshedToken = com.google.firebase.iid.FirebaseInstanceId.getInstance().getToken();

어느 것이 좋아요?


Type Script의 정의 파일을 만드는 것은 처음any 선언 방식에 비해 번거로울 수 있다고 생각합니다.
다른 서류로 싸서 포장을 선언하는 데 시간이 많이 걸린다.자신의 앱에서만 사용한다면 그럴 필요가 없을지도 모른다.다만, 외부인이 사용하는 프로그램 라이브러리와 플러그인을 만들 때는 이쪽 방식이 좋겠죠.사용 가능한 API를 명확히 정의할 수도 있고, 유효하게 유형 + IDE 보완을 하여 사용자가 안전하게 사용할 수 있도록 할 수도 있다.
반대로 any선언을 하면 방법명칭이 틀리든 파라미터의 유형이 일치하든 컴파일링이 통과되고 실행할 때 붕괴될 위험이 있어 팩스를 다시 보내기 어렵다.
예컨대 아래의com.google.〜섹션'googl' 을 써도 'and' 가 'com' 을 성명할 때 아무런 오류도 발생하지 않습니다.
let refreshedToken = com.googl.firebase.iid.FirebaseInstanceId.getInstance().getToken()
//              ↑通ってしまう
TypeScript의 정의 파일을 만드는 경우 googl이라는 모듈이 없습니다!의 컴파일 오류를 미리 발견할 수 있습니다.
장점과 단점을 이해하고 사용하세요.
Enjoy NativeScript!

좋은 웹페이지 즐겨찾기