forked from Meituan-Dianping/mpvue
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add TypeScript definition Remove unnecessary definition Update definitions * separate files * remove unnecessary `{[key: string]: any}` * from singular to plural Update definitions * Add more definitions * Rename filename and interface * Sort definitions * Fix indent Fix Add test * add test * fix some definitions * fix typo Fix ComputedOptions Update Vue.set Update definitions Add npm script
- Loading branch information
Showing
11 changed files
with
469 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
import {Vue} from "./vue.d"; | ||
export = Vue; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
import { Vue } from "./vue.d"; | ||
import { VNode, VNodeDirective } from "./vnode.d"; | ||
|
||
type Constructor = { | ||
new (...args: any[]): any; | ||
} | ||
|
||
export interface ComponentOptions { | ||
data?: Object | ( (this: Vue) => Object ); | ||
props?: string[] | { [key: string]: PropOptions | Constructor | Constructor[] }; | ||
propsData?: Object; | ||
computed?: { [key: string]: ((this: Vue) => any) | ComputedOptions }; | ||
methods?: { [key: string]: Function }; | ||
watch?: { [key: string]: ({ handler: WatchHandler } & WatchOptions) | WatchHandler | string }; | ||
|
||
el?: Element | String; | ||
template?: string; | ||
render?(createElement: typeof Vue.prototype.$createElement): VNode; | ||
staticRenderFns?: (() => VNode)[]; | ||
|
||
beforeCreate?(): void; | ||
created?(): void; | ||
beforeDestroy?(): void; | ||
destroyed?(): void; | ||
beforeMount?(): void; | ||
mounted?(): void; | ||
beforeUpdate?(): void; | ||
updated?(): void; | ||
|
||
directives?: { [key: string]: DirectiveOptions | DirectiveFunction }; | ||
components?: { [key: string]: ComponentOptions | typeof Vue }; | ||
transitions?: { [key: string]: Object }; | ||
filters?: { [key: string]: Function }; | ||
|
||
parent?: Vue; | ||
mixins?: (ComponentOptions | typeof Vue)[]; | ||
name?: string; | ||
extends?: ComponentOptions | typeof Vue; | ||
delimiters?: [string, string]; | ||
} | ||
|
||
export interface PropOptions { | ||
type?: Constructor | Constructor[] | null; | ||
required?: boolean; | ||
default?: any; | ||
validator?(value: any): boolean; | ||
} | ||
|
||
export interface ComputedOptions { | ||
get?(this: Vue): any; | ||
set?(this: Vue, value: any): void; | ||
cache?: boolean; | ||
} | ||
|
||
export type WatchHandler = <T>(val: T, oldVal: T) => void; | ||
|
||
export interface WatchOptions { | ||
deep?: boolean; | ||
immediate?: boolean; | ||
} | ||
|
||
export type DirectiveFunction = ( | ||
el: HTMLElement, | ||
binding: VNodeDirective, | ||
vnode: VNode, | ||
oldVnode: VNode | ||
) => void; | ||
|
||
export interface DirectiveOptions { | ||
bind?: DirectiveFunction; | ||
update?: DirectiveFunction; | ||
componentUpdated?: DirectiveFunction; | ||
unbind?: DirectiveFunction; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import { Vue as _Vue } from "./vue.d"; | ||
|
||
export type PluginFunction<T> = (Vue: typeof _Vue, options?: T) => void; | ||
|
||
export interface PluginObject<T> { | ||
install: PluginFunction<T>; | ||
[key: string]: any; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
import { Vue } from "../vue.d"; | ||
import { ComponentOptions } from "../options.d"; | ||
|
||
interface Component extends Vue { | ||
a: number; | ||
} | ||
|
||
const Options: ComponentOptions = { | ||
data() { | ||
return { | ||
a: 1 | ||
} | ||
}, | ||
props: { | ||
size: Number, | ||
name: { | ||
type: String, | ||
default: 0, | ||
required: true, | ||
validator(value) { | ||
return value > 0; | ||
} | ||
} | ||
}, | ||
propsData: { | ||
msg: "Hello" | ||
}, | ||
computed: { | ||
aDouble(this: Component) { | ||
return this.a * 2; | ||
}, | ||
aPlus: { | ||
get(this: Component) { | ||
return this.a + 1; | ||
}, | ||
set(this: Component, v: number) { | ||
this.a = v - 1; | ||
}, | ||
cache: false | ||
} | ||
}, | ||
methods: { | ||
plus(this: Component) { | ||
this.a++; | ||
} | ||
}, | ||
watch: { | ||
'a': function(val: number, oldVal: number) { | ||
console.log(`new: ${val}, old: ${oldVal}`); | ||
}, | ||
'b': 'someMethod', | ||
'c': { | ||
handler(val: number, oldval: number) {}, | ||
deep: true | ||
} | ||
}, | ||
el: "#app", | ||
template: "<div>{{ message }}</div>", | ||
render(createElement) { | ||
return createElement("div", { | ||
attrs: { | ||
id: "foo" | ||
}, | ||
props: { | ||
myProp: "bar" | ||
}, | ||
domProps: { | ||
innerHTML: "baz" | ||
}, | ||
on: { | ||
click: new Function | ||
}, | ||
nativeOn: { | ||
click: new Function | ||
}, | ||
class: { | ||
foo: true, | ||
bar: false | ||
}, | ||
style: { | ||
color: 'red', | ||
fontSize: '14px' | ||
}, | ||
key: 'myKey', | ||
ref: 'myRef' | ||
}, [ | ||
createElement("div", {}, "message"), | ||
"message", | ||
[createElement("div", {}, "message")] | ||
]); | ||
}, | ||
staticRenderFns: [], | ||
|
||
beforeCreate() {}, | ||
created() {}, | ||
beforeDestroy() {}, | ||
destroyed() {}, | ||
beforeMount() {}, | ||
mounted() {}, | ||
beforeUpdate() {}, | ||
updated() {}, | ||
|
||
directives: { | ||
a: { | ||
bind() {}, | ||
update() {}, | ||
componentMounted() {}, | ||
unbind() {} | ||
}, | ||
b(el, binding, vnode, oldVnode) { | ||
el.textContent; | ||
|
||
binding.name; | ||
binding.value; | ||
binding.oldValue; | ||
binding.expression; | ||
binding.arg; | ||
binding.modifiers["modifier"]; | ||
} | ||
}, | ||
components: { | ||
a: Vue.component(""), | ||
b: {} as ComponentOptions | ||
}, | ||
transitions: {}, | ||
filters: { | ||
double(value: number) { | ||
return value * 2; | ||
} | ||
}, | ||
parent: new Vue, | ||
mixins: [Vue.component(""), ({} as ComponentOptions)], | ||
name: "Component", | ||
extends: {} as ComponentOptions, | ||
delimiters: ["${", "}"] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import { Vue } from "../vue.d"; | ||
import { PluginFunction, PluginObject } from "../plugin.d"; | ||
|
||
class Option { | ||
prefix: string; | ||
suffix: string; | ||
} | ||
|
||
const plugin: PluginObject<Option> = { | ||
install(Vue, option) { | ||
if (typeof option !== "undefined") { | ||
const {prefix, suffix} = option; | ||
} | ||
} | ||
} | ||
const installer: PluginFunction<Option> = function(Vue, option) { } | ||
|
||
Vue.use(plugin, new Option); | ||
Vue.use(installer, new Option); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
{ | ||
"compilerOptions": { | ||
"target": "es5", | ||
"module": "commonjs", | ||
"noImplicitAny": true, | ||
"strictNullChecks": true, | ||
"noEmit": true | ||
}, | ||
"files": [ | ||
"../index.d.ts", | ||
"../options.d.ts", | ||
"../plugin.d.ts", | ||
"../vnode.d.ts", | ||
"../vue.d.ts", | ||
"options-test.ts", | ||
"plugin-test.ts", | ||
"vue-test.ts" | ||
], | ||
"compileOnSave": false | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
import { Vue } from "../vue.d"; | ||
|
||
class Test extends Vue { | ||
testProperties() { | ||
this.$data; | ||
this.$el; | ||
this.$options; | ||
this.$parent; | ||
this.$root; | ||
this.$children; | ||
this.$refs; | ||
this.$slots; | ||
this.$isServer; | ||
} | ||
|
||
testMethods() { | ||
this.$mount("#app", false); | ||
this.$forceUpdate(); | ||
this.$destroy(); | ||
this.$set({}, "key", "value"); | ||
this.$delete({}, "key"); | ||
this.$watch("a", (val: number, oldVal: number) => {}, { | ||
immediate: true, | ||
deep: false | ||
})(); | ||
this.$watch(() => {}, (val: number) => {}); | ||
this.$on("", () => {}); | ||
this.$once("", () => {}); | ||
this.$off("", () => {}); | ||
this.$emit("", 1, 2, 3); | ||
this.$nextTick(function() { | ||
this.$nextTick; | ||
}); | ||
this.$createElement("div", {}, "message", ""); | ||
} | ||
|
||
static testConfig() { | ||
const { config } = this; | ||
config.silent; | ||
config.optionMergeStrategies; | ||
config.devtools; | ||
config.errorHandler = (err, vm) => { | ||
if (vm instanceof Test) { | ||
vm.testProperties(); | ||
vm.testMethods(); | ||
} | ||
}; | ||
config.keyCodes = { esc: 27 }; | ||
} | ||
|
||
static testMethods() { | ||
this.extend({ | ||
data() { | ||
return { | ||
msg: "" | ||
}; | ||
} | ||
}); | ||
this.nextTick(() => {}); | ||
this.set({}, "", ""); | ||
this.set([true, false, true], 1, true); | ||
this.delete({}, ""); | ||
this.directive("", {bind() {}}); | ||
this.filter("", (value: number) => value); | ||
this.component("", { data: () => ({}) }); | ||
this.use; | ||
this.mixin(Test); | ||
this.compile("<div>{{ message }}</div>"); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"name": "vue", | ||
"main": "index.d.ts" | ||
} |
Oops, something went wrong.