arkts-static-spec について
ArkTS 開発者向けの言語仕様および TypeScript 移行リファレンススキルです。型や構文、並行処理の仕様、移行レシピ、互換性情報を整理し、文書に基づく回答を求めます。
主な機能
- 01テーマ別の ArkTS 仕様
- 02型・クラス・構文・並行処理
- 03TypeScript 移行レシピ
- 04ArkTS と TypeScript の差異
- 05文書に基づく回答
活用シーン
- 01ArkTS の型や構文規則を調べる
- 02TypeScript コードを ArkTS に移行
- 03言語機能の互換性を確認
- 04非同期処理と並行処理の仕様を参照
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ openharmonyinsight/ openharmony-skills --skill arkts-static-specインストール後、Claude Code で/arkts-static-specを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdcookbook/cookbook-compatibility.mdcookbook-recipes.mdindex.mdspec/ambients.mdannotations.mdauthors.mdbinary_compatibility.mdbuild_system.mdclasses.mdconcurrency.mdconversions.mdenums.mderrors.mdexperimental.mdexpressions.mdgenerics.mdgrammar.mdimplementation.mdinterfaces.mdintro.mdlexical.mdmodules.mdnames.mdruntime.mdsemantics.mdstatements.mdstdlib.mdtypes.md詳細
ArkTS Static Language Specification
ArkTS プログラミング言語の完全なリファレンスです。公式仕様と TypeScript 移行ガイドを含みます。
⚠️ 使用上の原則(重要)
この skill を使用して質問に回答する際は、以下の原則を必ず厳守してください。
-
skill のドキュメント内容に厳密に従って回答する
- すべての回答は、spec/ および cookbook/ ディレクトリ内のドキュメントに基づく必要があります
- ドキュメントにない仮定や推論を追加しないでください
-
ドキュメントに記載されていない内容を明確に示す
- skill のドキュメントに特定の機能について明確な説明がない場合、回答に次のように記載する必要があります:
- 「⚠️ skill のドキュメントには明確な説明がありません。使用者自身で確認してください」
- TypeScript や他の言語の機能をもとに推測しないでください
- skill のドキュメントに特定の機能について明確な説明がない場合、回答に次のように記載する必要があります:
-
ArkTS を独立した静的言語として扱う
- ArkTS は独立した静的言語であり、TypeScript のスーパーセットではありません
- TypeScript の機能がすべて ArkTS でサポートされていると仮定しないでください
- TypeScript の構文ではなく、ArkTS の公式仕様に従ってください
ディレクトリ構成
このスキルは、主に次の 2 つの部分で構成されています:
arkts-static-spec/
├── spec/ # ArkTS 语言规范
│ ├── types.md # 类型系统
│ ├── classes.md # 类声明
│ ├── expressions.md # 表达式和运算符
│ ├── statements.md # 语句和控制流
│ ├── generics.md # 泛型
│ ├── annotations.md # 注解和装饰器
│ ├── modules.md # 模块系统
│ ├── lexical.md # 词法结构
│ ├── names.md # 声明和作用域
│ ├── conversions.md # 类型转换
│ ├── interfaces.md # 接口
│ ├── enums.md # 枚举
│ ├── errors.md # 错误处理
│ ├── concurrency.md # 并发和异步
│ ├── stdlib.md # 标准库
│ └── experimental.md# 实验性特性
│
└── cookbook/ # TypeScript 迁移指南
├── index.md # 迁移指南总览
├── recipes.md # 详细迁移食谱(144+ 项)
└── compatibility.md # TypeScript vs ArkTS 兼容性详情
第 1 部:ArkTS 言語仕様(spec/)
テーマ別に構成された、ArkTS 言語の公式仕様リファレンスです。
主要な仕様ファイル
| ファイル | 内容 | 用途 |
|---|---|---|
| types.md | 型システム、事前定義型 | 型、型推論、デフォルト値の確認 |
| classes.md | クラス宣言、アクセス修飾子、継承 | クラスの定義、インターフェイスの実装、継承 |
| expressions.md | 演算子、優先順位 | 式の評価、演算子の使用 |
| statements.md | 制御フロー、ループ、try-catch | if/else、for、while、例外処理 |
| generics.md | ジェネリック型と関数 | ジェネリックコードの作成、型制約 |
| annotations.md | デコレーターとメタデータ | @Decorator の使用 |
| modules.md | Import/export、名前空間 | モジュール構成、インポートとエクスポート |
| lexical.md | 識別子、キーワード、リテラル | 字句解析、構文規則 |
| names.md | 宣言、スコープ、可視性 | 変数のスコープ、名前の衝突 |
| conversions.md | 型変換とコンテキスト | 型変換規則 |
| interfaces.md | インターフェイスの宣言と実装 | インターフェイスの定義、契約の実装 |
| enums.md | 列挙型 | 列挙型の使用 |
| errors.md | エラー処理と try 文 | 例外処理、throw 文 |
| concurrency.md | Async/await、TaskPool | 非同期プログラミング、並行処理 |
| stdlib.md | 標準ライブラリ API | 組み込みオブジェクトと関数 |
| experimental.md | 実験的機能 | FixedArray、char、関数のオーバーロードなど |
第 2 部:TypeScript 移行ガイド(cookbook/)
TypeScript から ArkTS への完全な移行ガイドです。144 件以上の詳細な移行レシピと互換性に関する説明が含まれています。
移行ガイドのファイル
| ファイル | 内容 | 用途 |
|---|---|---|
| index.md | 移行ガイドの概要 | 移行の理由、設計原則、クイックスタートの確認 |
| recipes.md | 144 件以上の詳細な移行レシピ | 具体的な構文の変換方法や、よくある問題の解決方法の確認 |
| compatibility.md | TypeScript と ArkTS の互換性に関する詳細 | 動作の違い、数値の意味、配列の代入などの確認 |
クイックスタート
ArkTS の型注釈
let num: number = 42
const str: string = "hello"
let arr: number[] = [1, 2, 3]
ArkTS のクラス宣言
class Person {
private name: string
public age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
public introduce(): string {
return `I'm ${this.name}, ${this.age} years old`
}
}
ジェネリック関数
function identity<T>(value: T): T {
return value
}
let num = identity<number>(42)
let str = identity<string>("hello")
非同期関数
async function fetchData(): Promise<string> {
const response = await fetch("https://example.com")
return await response.text()
}
型システム早見表
事前定義型
| 分類 | 型 | 説明 |
|---|---|---|
| 数値 | byte, short, int, long, float, double, number, bigint | 整数と浮動小数点数 |
| ブール値 | boolean | true/false |
| 文字 | char | 実験的機能です。c'A' 構文を使用します |
| 文字列 | string | テキストデータ |
| 特殊 | void, null, undefined, never | 特殊な用途 |
| オブジェクト | Object, object | オブジェクト型 |
注意:ArkTS では any と unknown はサポートされていないため、明示的な型を使用する必要があります。
型演算子
- 共用体型:
T | U - 交差型:
T & U - 配列型:
T[]またはArray<T> - 読み取り専用配列:
readonly T[]
TypeScript 移行早見表
よくある変換
| TypeScript | ArkTS | 説明 |
|---|---|---|
var x = 10 | let x: number = 10 | let を使用し、型を明示する必要があります |
let x: any | let x: SpecificType | any は禁止です。具体的な型を使用します |
let {a, b} = obj | let a = obj.a; let b = obj.b | オブジェクトの分割代入はサポートされていません |
"prop" in obj | obj instanceof Class | in 演算子はサポートされていません |
import m = require("mod") | import * as m from "mod" | ES6 の import を使用します |
コードの維持率
- 完全サポート(変更不要):90% - 97%
- 部分サポート(小規模なリファクタリング):約 2% - 8%
- 非サポート(リファクタリングが必要):約 1%
検索ガイド
ArkTS 言語仕様を調べる
テーマに応じて、該当する仕様ファイルを選択してください:
- 型に関する質問:spec/types.md、spec/conversions.md を参照してください
- オブジェクト指向機能:spec/classes.md、spec/interfaces.md、spec/enums.md を参照してください
- 構文に関する質問:spec/lexical.md、spec/expressions.md、spec/statements.md を参照してください
- ジェネリックプログラミング:spec/generics.md を参照してください
- モジュールシステム:spec/modules.md を参照してください
- 並行プログラミング:spec/concurrency.md を参照してください
- デコレーターとアノテーション:spec/annotations.md を参照してください
- 標準ライブラリ API:spec/stdlib.md を参照してください
- 実験的機能:spec/experimental.md を参照してください
查询 TypeScript 迁移问题
- 迁移概述和原则:查看 cookbook/index.md
- 具体语法如何转换:查看 cookbook/recipes.md
- 行为差异和兼容性:查看 cookbook/compatibility.md
ArkTS vs TypeScript 关键差异
1. 静态类型强制执行
| 特性 | TypeScript | ArkTS |
|---|---|---|
| 静态类型 | 可选 | 强制 |
any 类型 | 允许 | 禁止 |
unknown 类型 | 允许 | 禁止 |
| 类型推断 | 可选 | 必须 |
2. 对象布局固定
| 特性 | TypeScript | ArkTS |
|---|---|---|
| 运行时添加属性 | 允许(用 as any 绕过) | 禁止 |
| 删除属性 | 允许(用 as any 绕过) | 禁止 |
| 对象布局 | 可变 | 固定 |
3. Null 安全
| 特性 | TypeScript | ArkTS |
|---|---|---|
null 赋值给非空类型 | 可选模式下禁止 | 强制禁止 |
undefined 作为值 | 允许 | 严格限制 |
4. 数值语义
let n = 1
console.log(n / 2)
// TypeScript: 0.5(浮点除法)
// ArkTS: 0(整数除法)
访问修饰符
| 修饰符 | 可访问性 |
|---|---|
public | 任何地方(默认) |
private | 仅类内部 |
protected | 类和子类 |
readonly | 初始化后不可变 |
static | 类级别,非实例级别 |
常见设计模式
单例模式
class Singleton {
private static instance: Singleton
private constructor() {}
public static getInstance(): Singleton {
if (!Singleton.instance) {
Singleton.instance = new Singleton()
}
return Singleton.instance
}
}
工厂模式
interface Product {
operation(): string
}
class ConcreteProductA implements Product {
operation(): string {
return "Product A"
}
}
class Factory {
static create(type: string): Product {
if (type === "A") {
return new ConcreteProductA()
}
throw new Error("Unknown product type")
}
}
为什么选择 ArkTS?
优势
-
程序稳定性
- 严格类型检查,减少运行时错误
- 编译时类型验证
- 字段必须初始化
-
程序性能
- 编译为字节码,执行更快
- 消除运行时类型检查开销
- 针对移动设备优化
-
代码可读性
- 静态类型让代码意图清晰
- 对象布局固定,行为可预测
迁移成本
- 代码保持率:90% - 97%(遵循最佳实践)
- 主要调整:移除
any、使用let代替var - 学习曲线:TypeScript 开发者易于上手
控制流速查
if-else
if (condition) {
// ...
} else {
// ...
}
循环
// while 循环
while (condition) {
// ...
}
// for 循环
for (let i: int = 0; i < 10; i++) {
// ...
}
// for-of 循环
for (const item of array) {
// ...
}
错误处理
try {
// 可能抛出错误的代码
} catch (e: Error) {
// 处理错误
} finally {
// 清理(总是执行)
}
迁移检查清单
优先级 1:必须修复(ERROR 级别)
- 替换所有
var为let - 移除所有
any/unknown类型 - 移除
Symbol()API 使用 - 移除私有
#标识符 - 确保类型和命名空间名称唯一
- 移除非标识符属性名
- 移除调用签名和构造签名类型
- 移除
in运算符 - 移除对象解构
- 替换
require为标准import - 移除
export =语法
优先级 2:代码改进建议(WARNING 级别)
- 检查字段初始化
- 审查对象属性访问模式
- 确保类型安全
完整参考
コメント
Markdown 対応