Browse Source
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 scriptdev
kaorun343
8 years ago
committed by
Evan You
11 changed files with 469 additions and 1 deletions
@ -0,0 +1,2 @@ |
|||||
|
import {Vue} from "./vue.d"; |
||||
|
export = Vue; |
@ -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; |
||||
|
} |
@ -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; |
||||
|
} |
@ -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: ["${", "}"] |
||||
|
} |
@ -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); |
@ -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 |
||||
|
} |
@ -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>"); |
||||
|
} |
||||
|
} |
@ -0,0 +1,4 @@ |
|||||
|
{ |
||||
|
"name": "vue", |
||||
|
"main": "index.d.ts" |
||||
|
} |
@ -0,0 +1,65 @@ |
|||||
|
import { Vue } from "./vue.d"; |
||||
|
|
||||
|
export type VNodeChildren = VNodeChildrenArrayContents | string; |
||||
|
export interface VNodeChildrenArrayContents { |
||||
|
[x: number]: VNode | string | VNodeChildren; |
||||
|
} |
||||
|
|
||||
|
export interface VNode { |
||||
|
tag?: string; |
||||
|
data?: VNodeData; |
||||
|
children?: VNode[]; |
||||
|
text?: string; |
||||
|
elm?: Node; |
||||
|
ns?: string; |
||||
|
context?: Vue; |
||||
|
key?: string | number; |
||||
|
componentOptions?: VNodeComponentOptions; |
||||
|
child?: Vue; |
||||
|
parent?: VNode; |
||||
|
raw?: boolean; |
||||
|
isStatic?: boolean; |
||||
|
isRootInsert: boolean; |
||||
|
isComment: boolean; |
||||
|
} |
||||
|
|
||||
|
export interface VNodeComponentOptions { |
||||
|
Ctor: Vue; |
||||
|
propsData?: Object; |
||||
|
listeners?: Object; |
||||
|
children?: VNodeChildren; |
||||
|
tag?: string; |
||||
|
} |
||||
|
|
||||
|
export interface VNodeData { |
||||
|
key?: string | number; |
||||
|
slot?: string; |
||||
|
ref?: string; |
||||
|
tag?: string; |
||||
|
staticClass?: string; |
||||
|
class?: any; |
||||
|
style?: Object[] | Object; |
||||
|
props?: { [key: string]: any }; |
||||
|
attrs?: { [key: string]: any }; |
||||
|
domProps?: { [key: string]: any }; |
||||
|
hook?: { [key: string]: Function }; |
||||
|
on?: { [key: string]: Function | Function[] }; |
||||
|
nativeOn?: { [key: string]: Function | Function[] }; |
||||
|
transition?: Object; |
||||
|
show?: boolean; |
||||
|
inlineTemplate?: { |
||||
|
render: Function; |
||||
|
staticRenderFns: Function[]; |
||||
|
}; |
||||
|
directives?: VNodeDirective[]; |
||||
|
keepAlive?: boolean; |
||||
|
} |
||||
|
|
||||
|
export interface VNodeDirective { |
||||
|
readonly name: string; |
||||
|
readonly value: any; |
||||
|
readonly oldValue: any; |
||||
|
readonly expression: any; |
||||
|
readonly arg: string; |
||||
|
readonly modifiers: { [key: string]: boolean }; |
||||
|
} |
@ -0,0 +1,69 @@ |
|||||
|
import { |
||||
|
ComponentOptions, |
||||
|
WatchOptions, |
||||
|
WatchHandler, |
||||
|
DirectiveOptions, |
||||
|
DirectiveFunction |
||||
|
} from "./options.d"; |
||||
|
import { VNode, VNodeData, VNodeChildren } from "./vnode.d"; |
||||
|
import { PluginFunction, PluginObject } from "./plugin.d"; |
||||
|
|
||||
|
export declare class Vue { |
||||
|
|
||||
|
constructor(options?: ComponentOptions); |
||||
|
|
||||
|
$data: Object; |
||||
|
readonly $el: HTMLElement; |
||||
|
readonly $options: ComponentOptions; |
||||
|
readonly $parent: Vue; |
||||
|
readonly $root: Vue; |
||||
|
readonly $children: Vue[]; |
||||
|
readonly $refs: { [key: string]: Vue }; |
||||
|
readonly $slots: { [key: string]: VNode[] }; |
||||
|
readonly $isServer: boolean; |
||||
|
|
||||
|
$mount(elementOrSelector?: Element | String, hydrating?: boolean): this; |
||||
|
$forceUpdate(): void; |
||||
|
$destroy(): void; |
||||
|
$set: typeof Vue.set; |
||||
|
$delete: typeof Vue.delete; |
||||
|
$watch( |
||||
|
expOrFn: string | Function, |
||||
|
callback: WatchHandler, |
||||
|
options?: WatchOptions |
||||
|
): (() => void); |
||||
|
$on(event: string, callback: Function): this; |
||||
|
$once(event: string, callback: Function): this; |
||||
|
$off(event?: string, callback?: Function): this; |
||||
|
$emit(event: string, ...args: any[]): this; |
||||
|
$nextTick(callback?: (this: this) => void): void; |
||||
|
$createElement( |
||||
|
tag?: string | Vue, |
||||
|
data?: VNodeData, |
||||
|
children?: VNodeChildren, |
||||
|
namespace?: string |
||||
|
): VNode; |
||||
|
|
||||
|
|
||||
|
static config: { |
||||
|
silent: boolean; |
||||
|
optionMergeStrategies: any; |
||||
|
devtools: boolean; |
||||
|
errorHandler(err: Error, vm: Vue): void; |
||||
|
keyCodes: { [key: string]: number }; |
||||
|
} |
||||
|
|
||||
|
static extend(options: ComponentOptions): Vue; |
||||
|
static nextTick(callback: () => void, context?: any[]): void; |
||||
|
static set<T>(object: Object, key: string, value: T): T; |
||||
|
static set<T>(array: T[], key: number, value: T): T; |
||||
|
static delete(object: Object, key: string): void; |
||||
|
|
||||
|
static directive(id: string, definition?: DirectiveOptions | DirectiveFunction): DirectiveOptions; |
||||
|
static filter(id: string, definition?: Function): Function; |
||||
|
static component(id: string, definition?: ComponentOptions | typeof Vue): typeof Vue; |
||||
|
|
||||
|
static use<T>(plugin: PluginObject<T> | PluginFunction<T>, options?: T): void; |
||||
|
static mixin(mixin: typeof Vue | ComponentOptions): void; |
||||
|
static compile(template: string): { render: Function, staticRenderFns: Function }; |
||||
|
} |
Loading…
Reference in new issue