跳到主要内容

使用 Types

提示

SCW 为 CoCo 自定义控件编写了 Types,使得 TypeScript 编译器可以更好地工作。

一、安装

安装 SCW 和 TypeScript 编译器,在自定义控件目录中执行:

npm install slightning-coco-widget tsc --save-dev

二、启用类型检查

我们假定你有一个使用 JavaScript 编写的自定义控件,并将其放在了 src 目录下。

首先创建 TypeScript 配置文件。在项目根目录下创建一个名为 tsconfig.json 的文件,并添加以下内容:

// tsconfig.json

{
"compilerOptions": {
"outDir": "dist", // 编译输出目录
"target": "ESNext", // 编译目标 JavaScript 版本,这里设置为 ESNext,以关闭 TypeScript 兼容性转义,防止出现一些奇奇怪怪的问题
"module": "preserve", // 保留模块导入方式,防止 TypeScript 将 CoCo 导入和导出转为其他形式
"moduleResolution": "bundler", // 按照打包器的模块解析方式解析模块导入
"jsx": "react", // JSX 转为 React
"lib": ["ESNext", "DOM"], // 使用 JS 和浏览器 API
"skipLibCheck": true // 跳过对依赖库的检查
},
"include": ["src/*"]
}

接下来为控件类型定义添加类型批注。

例如,假如控件的定义为:

const types = {
type: "MY_WIDGET",
title: "我的控件",
icon: "icon-widget-radio",
isInvisibleWidget: true,
isGlobalWidget: false,
properties: [],
methods: [],
events: []
}

class MyWidget extends InvisibleWidget {
// ...
}

exports.types = types
exports.widget = MyWidget

则应将其修改为:

// 导入 CoCo 相关的类型定义
import type { CoCo } from "slightning-coco-widget"

// 为控件类型定义添加类型批注
const types: CoCo.Types = {
type: "MY_WIDGET",
title: "我的控件",
icon: "icon-widget-radio",
isInvisibleWidget: true,
isGlobalWidget: false,
properties: [],
methods: [],
events: []
}

// 为控件实体定义添加类型批注,这里以不可见控件为例。如果是可见控件,只需将`InvisibleWidget`改为`VisibleWidget`
declare const InvisibleWidget: typeof CoCo.InvisibleWidget
class MyWidget extends InvisibleWidget {
// ...
}

exports.types = types
exports.widget = MyWidget

三、编译

使用 tsc 将 TypeScript 代码转为 JS 代码。

在自定义控件目录中执行:

tsc

然后,在原控件目录内,会生成一个同名的 JS 文件。