安装

1
npm i -g typescript

编译ts文件

使用该命令可以将 ts 文件转换成可执行的 js 文件。

1
tsc xxx.ts

通过 node 命令执行相应的 js 文件。

1
node xxx.js

直接运行ts文件

先安装所需工具包。

1
npm i -g ts-node

使用该工具包直接执行 ts 文件。

1
ts-node xxx.ts

使用时的一些小问题

类型本身定义是错误的

比如,在使用 MemFireDB 的微信SDK开发小程序的时候,我使用了一个方法用于获取用户信息。

1
const { data: { user } } = await supabase.auth.getUser();

对于 user 对应的官方 type 是 User,如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
interface User {
id: string
app_metadata: UserAppMetadata
user_metadata: UserMetadata
aud: string
confirmation_sent_at?: string
recovery_sent_at?: string
email_change_sent_at?: string
new_email?: string
new_phone?: string
invited_at?: string
action_link?: string
email?: string
phone?: string
created_at: string
confirmed_at?: string
email_confirmed_at?: string
phone_confirmed_at?: string
last_sign_in_at?: string
role?: string
updated_at?: string
identities?: UserIdentity[]
factors?: Factor[]
}

然而经过实际打印输出我发现,这个 user 的数据结构如下所示。

1
2
3
4
5
6
7
{
"data": {
"id":"xxx",
"app_metadata":{},
"xxx":"xxxx"
}
}

所以正确的的 User 定义应该是下面这样的。

1
2
3
4
5
6
7
interface User {
data:{
id: string
app_metadata: UserAppMetadata
xxx:xxxx
}
}

虽然我发现了错误,但我业务做一半,也不能不用这个了吧。所以我自己定义了一个 type ,如下所示。

1
2
3
interface MyUser {
data: User,
}

然后使用断言 as 进行强制类型转换,先取消原有的类型声明,再声明为新的类型。

1
let myUser = user as unknown as MyUser;

这样一来,我就可以通过 myUser.data.id 这种形式,正常使用数据。