Kotlin/JS에서 Type Script의 유형 정의 파일을 생성하는 방법
이 기능은 IR 컴파일러 전용 기능으로 아직 프리뷰 버전이라 업무상 사용하기에는 이른 것 같습니다.
형식 정의 파일 생성 기능 사용하기 준비
build.gradle.kts에서 IR 컴파일러를 사용하도록 설정
kotlin에서 설명
binaries.executable()
...
kotlin {
js(IR) { // ①
browser {
}
binaries.executable() // ②
}
}
사용법
1. 유형 정의를 생성하려는 아이템에 @JsExport 부여
※ 주의
@JsExport
최고급 제품만@JsExport
class TopLevelClass(val a: Int, var b: Int)
2.gradle build 실행
build/js/packages/{プロジェクト名}/kotlin/{プロジェクト名}.d.ts
에서 형식 정의 파일을 생성합니다.많이 해봤어요.
top level class
Kotlin 코드
@JsExport
class TopLevelClass(val a: Int, var b: Int)
.d.tsexport class TopLevelClass {
constructor(a: number, b: number);
readonly a: number;
b: number;
}
extend class
Kotlin 코드
@JsExport
open class SuperClass(val superA: Int)
@JsExport
class SubClass(val subA: Int): SuperClass(1)
.d.tsexport class SuperClass {
constructor(superA: number);
readonly superA: number;
}
export class SubClass extends SuperClass {
constructor(subA: number);
readonly subA: number;
}
※ 부류가 @JsExport
를 추가하지 않으면 부류의 유형 정의를 출력하지 않습니다.top level data class
Kotlin 코드
@JsExport
data class DataClass(val a: Int, var b: Int)
.d.tsexport class DataClass {
constructor(a: number);
readonly a: number;
component1(): number;
copy(a: number): DataClass;
toString(): string;
hashCode(): number;
equals(other: Nullable<any>): boolean;
}
Nested Class
Kotlin 코드
@JsExport
class OuterClass(val outerA: Int) {
class NestedClass(val innerA: Int)
}
컴파일 오류...e: java.lang.IllegalStateException: Can't find name for declaration CLASS CLASS name:NestedClass modality:FINAL visibility:public superTypes:[kotlin.Any]
Inner Class
Kotlin 코드
@JsExport
class OuterClass(val outerA: Int) {
inner class InnerClass(val innerA: Int)
}
컴파일 오류...e: java.lang.IllegalStateException: Can't find name for declaration CLASS CLASS name:InnerClass modality:FINAL visibility:public [inner] superTypes:[kotlin.Any]
interface
Kotlin 코드
@JsExport
interface Interface {
fun method(a: Int): Int
fun defaultMethod(a: Int): Int = a
val field: Int
}
.d.tsexport interface Interface {
method(a: number): number;
defaultMethod(a: number): number;
readonly field: number;
}
abstruct class
Kotlin 코드
@JsExport
abstract class AbstractClass(val a: Int)
.d.tsexport interface Interface {
method(a: number): number;
defaultMethod(a: number): number;
readonly field: number;
}
object
Kotlin 코드
@JsExport
object Object {
val a: Int = 1
}
컴파일 오류...e: java.lang.IllegalStateException: Class Object with kind: OBJECT
companion object
Kotlin 코드
@JsExport
class A {
companion object {
fun method(): Int = 0
val a: Int = 0
}
}
컴파일 오류...e: java.lang.IllegalStateException: Class DataClass.Companion with kind: OBJECT
top level function
Kotlin 코드
@JsExport
fun topLevelFunction(): Int = 0
export function topLevelFunction(): number;
Enum Class
Kotlin 코드
@JsExport
enum class Enum {
A, B, C
}
컴파일 오류... @JsExport
Enum에 설치할 수 없음Declaration of such kind (enum class) cant be exported to JS
오존 상황 등은 youtrack에서 관리한다총결산
아직 프리뷰 문제가 많고 BUG가 많지만 유형 정의 파일을 생성할 수 있기 때문에 Kotlin/JS로 프로그램 라이브러리를 만드는 패턴이 늘어날 것 같아요.
Reference
이 문제에 관하여(Kotlin/JS에서 Type Script의 유형 정의 파일을 생성하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/44x1carbon/articles/d41747c0c7d4ce5174e0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)