options-test.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import Vue = require("../index");
  2. import { ComponentOptions, FunctionalComponentOptions } from "../index";
  3. interface Component extends Vue {
  4. a: number;
  5. }
  6. Vue.component('component', {
  7. data() {
  8. this.$mount
  9. this.a
  10. return {
  11. a: 1
  12. }
  13. },
  14. props: {
  15. size: Number,
  16. name: {
  17. type: String,
  18. default: 0,
  19. required: true,
  20. validator(value) {
  21. return value > 0;
  22. }
  23. }
  24. },
  25. propsData: {
  26. msg: "Hello"
  27. },
  28. computed: {
  29. aDouble(this: Component) {
  30. return this.a * 2;
  31. },
  32. aPlus: {
  33. get(this: Component) {
  34. return this.a + 1;
  35. },
  36. set(this: Component, v: number) {
  37. this.a = v - 1;
  38. },
  39. cache: false
  40. }
  41. },
  42. methods: {
  43. plus(this: Component) {
  44. this.a++;
  45. }
  46. },
  47. watch: {
  48. 'a': function(val: number, oldVal: number) {
  49. console.log(`new: ${val}, old: ${oldVal}`);
  50. },
  51. 'b': 'someMethod',
  52. 'c': {
  53. handler(val, oldVal) {
  54. this.a = val
  55. },
  56. deep: true
  57. }
  58. },
  59. el: "#app",
  60. template: "<div>{{ message }}</div>",
  61. render(createElement) {
  62. return createElement("div", {
  63. attrs: {
  64. id: "foo"
  65. },
  66. props: {
  67. myProp: "bar"
  68. },
  69. domProps: {
  70. innerHTML: "baz"
  71. },
  72. on: {
  73. click: new Function
  74. },
  75. nativeOn: {
  76. click: new Function
  77. },
  78. class: {
  79. foo: true,
  80. bar: false
  81. },
  82. style: {
  83. color: 'red',
  84. fontSize: '14px'
  85. },
  86. key: 'myKey',
  87. ref: 'myRef'
  88. }, [
  89. createElement("div", {}, "message"),
  90. createElement(Vue.component("component")),
  91. createElement({} as ComponentOptions<Vue>),
  92. createElement({ functional: true }),
  93. createElement(() => Vue.component("component")),
  94. createElement(() => ( {} as ComponentOptions<Vue> )),
  95. createElement(() => {
  96. return new Promise((resolve) => {
  97. resolve({} as ComponentOptions<Vue>);
  98. })
  99. }),
  100. createElement((resolve, reject) => {
  101. resolve({} as ComponentOptions<Vue>);
  102. reject();
  103. }),
  104. "message",
  105. [createElement("div", {}, "message")]
  106. ]);
  107. },
  108. staticRenderFns: [],
  109. beforeCreate() {
  110. this.a = 1;
  111. },
  112. created() {},
  113. beforeDestroy() {},
  114. destroyed() {},
  115. beforeMount() {},
  116. mounted() {},
  117. beforeUpdate() {},
  118. updated() {},
  119. directives: {
  120. a: {
  121. bind() {},
  122. inserted() {},
  123. update() {},
  124. componentMounted() {},
  125. unbind() {}
  126. },
  127. b(el, binding, vnode, oldVnode) {
  128. el.textContent;
  129. binding.name;
  130. binding.value;
  131. binding.oldValue;
  132. binding.expression;
  133. binding.arg;
  134. binding.modifiers["modifier"];
  135. }
  136. },
  137. components: {
  138. a: Vue.component(""),
  139. b: {} as ComponentOptions<Vue>
  140. },
  141. transitions: {},
  142. filters: {
  143. double(value: number) {
  144. return value * 2;
  145. }
  146. },
  147. parent: new Vue,
  148. mixins: [Vue.component(""), ({} as ComponentOptions<Vue>)],
  149. name: "Component",
  150. extends: {} as ComponentOptions<Vue>,
  151. delimiters: ["${", "}"]
  152. } as ComponentOptions<Component>);
  153. Vue.component('functional-component', {
  154. props: ['prop'],
  155. functional: true,
  156. render(createElement, context) {
  157. context.props;
  158. context.children;
  159. context.slots;
  160. context.data;
  161. context.parent;
  162. return createElement("div", {}, context.children);
  163. }
  164. } as FunctionalComponentOptions);
  165. Vue.component("async-component", (resolve, reject) => {
  166. setTimeout(() => {
  167. resolve(Vue.component("component"));
  168. }, 0);
  169. return new Promise((resolve) => {
  170. resolve({ functional: true } as FunctionalComponentOptions);
  171. })
  172. });