JavaScript实现类似Java的泛型

现在有个需求, 后端对于每一张数据库的表都暴露三个主要APInamespace/listnamespace/savenamespace/update 以及其他扩展接口。
现在需要用JavaScript编写一种较通用可扩展的代码。

当然在JavaScript中实现这个需求方法很多, 这里讲述的是如何在ECMAScript 6中用类似Java中的泛型, 继承来解决

最后使用如下

1
2
3
import AppApi from "./AppApi"

AppApi.list()

AppApi.js

Api类如下 十分的OO

1
2
3
4
5
import BaseApi from "./BaseDBApi"

export default class AppApi extends BaseApi("/app") {
//...extension method
}

BaseApi.js

由于JS动态的特性, 可以比Java更加灵活 动态构造类, static 标注的方法可以直接通过类名, 子类继承后 也可以通过子类的类名调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import request from "@/common/request"

export default function builder(baseUrl) {
return class BaseApi {
static list(form) {
return request({
url: `${baseUrl}/list`,
data: form
})
}

static save(form) {
return request({
url: `${baseUrl}/save`,
data: form
})
}

static update(form) {
return request({
url: `${baseUrl}/update`,
data: form
})
}
}
}