Skip to content

Commit 4c9b3de

Browse files
authored
feat: add types (#200)
1 parent f980a19 commit 4c9b3de

File tree

4 files changed

+109
-0
lines changed

4 files changed

+109
-0
lines changed

docs/FAQ.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,18 @@ rules: [
2626
}
2727
]
2828
```
29+
30+
## 在 TypeScript 中指定组件的类型
31+
32+
```html
33+
<script lang="ts">
34+
// 需要引入这个
35+
// import { ElFormRendererType } from '@femessage/el-form-renderer'
36+
export default {
37+
mounted() {
38+
(this.$refs.form as ElFormRendererType).readonly = true
39+
},
40+
}
41+
</script>
42+
```
43+
> 关于更多可用类型请参考:[el-form-renderer.d.ts](https://github.com/FEMessage/el-form-renderer/blob/dev/src/el-form-renderer.d.ts)

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"browser": {
2929
"./sfc": "src/el-form-renderer.vue"
3030
},
31+
"types": "src/el-form-renderer.d.ts",
3132
"scripts": {
3233
"dev": "vue-styleguidist server",
3334
"doc": "vue-styleguidist build",
@@ -60,6 +61,7 @@
6061
"@babel/preset-env": "^7.4.3",
6162
"@femessage/el-semver-input": "^1.1.3",
6263
"@femessage/github-release-notes": "latest",
64+
"@femessage/types": "^1.0.3",
6365
"@vue/test-utils": "^1.0.0-beta.30",
6466
"axios": "^0.19.0",
6567
"babel-core": "^7.0.0-bridge.0",

src/el-form-renderer.d.ts

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import Vue, {VueConstructor, VNode} from 'vue'
2+
3+
import {Form} from '@femessage/types/element-ui'
4+
5+
declare module '@femessage/el-form-renderer' {
6+
class FemessageComponent extends Vue {
7+
static install(vue: typeof Vue): void
8+
}
9+
10+
type CombinedVueInstance<
11+
Instance extends Vue,
12+
Data,
13+
Methods,
14+
Computed,
15+
Props
16+
> = Data & Methods & Computed & Props & Instance
17+
18+
type ExtendedVue<
19+
Instance extends Vue,
20+
Data,
21+
Methods,
22+
Computed,
23+
Props
24+
> = VueConstructor<
25+
CombinedVueInstance<Instance, Data, Methods, Computed, Props> & Vue
26+
>
27+
28+
type Combined<Data, Methods, Computed, Props> = Data &
29+
Methods &
30+
Computed &
31+
Props
32+
33+
type ElFormRendererData = {
34+
value: {[key: string]: any}
35+
options: {[key: string]: any}
36+
initValue: null | {[key: string]: any}
37+
}
38+
39+
type ElFormRendererMethods = {
40+
resetFields: () => void
41+
42+
getFormValue: () => {[key: string]: any}
43+
44+
updateForm: (newValue: any) => void
45+
46+
setOptions: (id: string, options: any[]) => void
47+
}
48+
49+
type ElFormRendererComputed = {}
50+
51+
export interface FormContentItem {
52+
id: string
53+
label?: string | VNode
54+
[key: string]: any
55+
}
56+
57+
export type FormContent = Array<FormContentItem>
58+
59+
type ElFormRendererProps = {
60+
content: FormContent
61+
disabled: boolean
62+
readonly: boolean
63+
form: {[key: string]: any}
64+
}
65+
66+
type ElFormRenderer = Combined<
67+
ElFormRendererData,
68+
ElFormRendererMethods,
69+
ElFormRendererComputed,
70+
ElFormRendererProps
71+
>
72+
73+
export interface ElFormRendererType
74+
extends FemessageComponent,
75+
ElFormRenderer,
76+
Form {}
77+
78+
const ElFormRendererConstruction: ExtendedVue<
79+
Vue,
80+
ElFormRendererData,
81+
ElFormRendererMethods,
82+
ElFormRendererComputed,
83+
ElFormRendererProps
84+
>
85+
86+
export default ElFormRendererConstruction
87+
}

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,11 @@
768768
require-yaml "0.0.1"
769769
valid-url "^1.0.9"
770770

771+
"@femessage/types@^1.0.3":
772+
version "1.0.3"
773+
resolved "https://registry.npmjs.org/@femessage/types/-/types-1.0.3.tgz#1c93d89506628c7e5a8662da4fa88e765ce57b02"
774+
integrity sha512-VXeHibO3nNNgTZ5WH0wv4ejjGO3oCnyefjvmw6dZoX08DU4URcfnyw8JQ67IK0rI3xBoIyTPSWFCu29Hi7RrIQ==
775+
771776
"@jest/console@^24.7.1":
772777
version "24.7.1"
773778
resolved "https://registry.npm.taobao.org/@jest/console/download/@jest/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545"

0 commit comments

Comments
 (0)