options-test.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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() {
  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(),
  90. createElement("div", "message"),
  91. createElement(Vue.component("component")),
  92. createElement({} as ComponentOptions<Vue>),
  93. createElement({ functional: true }),
  94. createElement(() => Vue.component("component")),
  95. createElement(() => ( {} as ComponentOptions<Vue> )),
  96. createElement(() => {
  97. return new Promise((resolve) => {
  98. resolve({} as ComponentOptions<Vue>);
  99. })
  100. }),
  101. createElement((resolve, reject) => {
  102. resolve({} as ComponentOptions<Vue>);
  103. reject();
  104. }),
  105. "message",
  106. [createElement("div", "message")]
  107. ]);
  108. },
  109. staticRenderFns: [],
  110. beforeCreate() {
  111. this.a = 1;
  112. },
  113. created() {},
  114. beforeDestroy() {},
  115. destroyed() {},
  116. beforeMount() {},
  117. mounted() {},
  118. beforeUpdate() {},
  119. updated() {},
  120. directives: {
  121. a: {
  122. bind() {},
  123. inserted() {},
  124. update() {},
  125. componentMounted() {},
  126. unbind() {}
  127. },
  128. b(el, binding, vnode, oldVnode) {
  129. el.textContent;
  130. binding.name;
  131. binding.value;
  132. binding.oldValue;
  133. binding.expression;
  134. binding.arg;
  135. binding.modifiers["modifier"];
  136. }
  137. },
  138. components: {
  139. a: Vue.component(""),
  140. b: {} as ComponentOptions<Vue>
  141. },
  142. transitions: {},
  143. filters: {
  144. double(value: number) {
  145. return value * 2;
  146. }
  147. },
  148. parent: new Vue,
  149. mixins: [Vue.component(""), ({} as ComponentOptions<Vue>)],
  150. name: "Component",
  151. extends: {} as ComponentOptions<Vue>,
  152. delimiters: ["${", "}"]
  153. } as ComponentOptions<Component>);
  154. Vue.component('functional-component', {
  155. props: ['prop'],
  156. functional: true,
  157. render(createElement, context) {
  158. context.props;
  159. context.children;
  160. context.slots();
  161. context.data;
  162. context.parent;
  163. return createElement("div", {}, context.children);
  164. }
  165. } as FunctionalComponentOptions);
  166. Vue.component("async-component", (resolve, reject) => {
  167. setTimeout(() => {
  168. resolve(Vue.component("component"));
  169. }, 0);
  170. return new Promise((resolve) => {
  171. resolve({ functional: true } as FunctionalComponentOptions);
  172. })
  173. });