import Vue = require("../index"); import { ComponentOptions } from "../index"; interface Component extends Vue { a: number; } Vue.component('component', { data() { this.$mount this.a 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.a++; } }, watch: { 'a': function(val: number, oldVal: number) { console.log(`new: ${val}, old: ${oldVal}`); }, 'b': 'someMethod', 'c': { handler(val, oldVal) { this.a = val }, deep: true } }, el: "#app", template: "
{{ message }}
", beforeCreate() { this.a = 1; }, created() {}, beforeDestroy() {}, destroyed() {}, beforeMount() {}, mounted() {}, beforeUpdate() {}, updated() {}, activated() {}, deactivated() {}, directives: { a: { bind() {}, inserted() {}, update() {}, componentMounted() {}, unbind() {} }, b(val, newVal) { this.el.textContent; this.name; this.expression; this.arg; this.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: ["${", "}"] } as ComponentOptions); Vue.component("async-component", (resolve, reject) => { setTimeout(() => { resolve(Vue.component("component")); }, 0); return new Promise((resolve) => { resolve({ } as ComponentOptions); }) });