类型推导及注意事项

Mpx基于泛型函数提供了非常方便用户使用的反向类型推导能力,简单来说,就是用户可以用非常接近于js的方式调用Mpx提供的api,就能够获得大量基于用户输入参数反向推导得到的类型提示及检查。但是由于ts本身的能力限制,我们在mpx的运行时中添加了少量辅助函数和变种api,便于用户最大程度地享受反向类型推导带来的便利性,具体的注意事项和使用方法如下述demo

  1. import {createComponent, getComputed, getMixin, createStoreWithThis} from '@mpxjs/core'
  2. // createStoreWithThis作为createStore的变种方法,主要变化在于定义getters,mutations和actions时,
  3. // 获取自身的state,getters等属性不再通过参数传入,而是通过this.state或者this.getters等属性进行访问,
  4. // 由于TS的能力限制,getters/mutations/actions只有使用对象字面量的方式直接传入createStoreWithThis时
  5. // 才能正确推导出this的类型,当需要将getters/mutations/actions拆解为对象编写时,
  6. // 需要用户显式地声明this类型,无法直接推导得出。
  7. const store = createStoreWithThis({
  8. state: {
  9. aa: 1,
  10. bb: 2
  11. },
  12. getters: {
  13. cc() {
  14. return this.state.aa + this.state.bb
  15. }
  16. },
  17. actions: {
  18. doSth3() {
  19. console.log(this.getters.cc)
  20. return false
  21. }
  22. }
  23. })
  24. createComponent({
  25. data: {
  26. a: 1,
  27. b: '2'
  28. },
  29. computed: {
  30. c() {
  31. return this.b
  32. },
  33. d() {
  34. // 在computed中访问当前computed对象中的其他计算属性时,需要用getComputed辅助函数包裹,
  35. // 而除此以外的任何场景下都不需要使用,例如访问data或者mixins中定义的computed等数据
  36. return getComputed(this.c) + this.a + this.aaa
  37. },
  38. // 从store上map过来的计算属性或者方法同样能够被推导到this中
  39. ...store.mapState(['aa'])
  40. },
  41. mixins: [
  42. // 使用mixins,需要对每一个mixin子项进行getMixin辅助函数包裹,支持嵌套mixin
  43. getMixin({
  44. computed: {
  45. aaa() {
  46. return 123
  47. }
  48. },
  49. methods: {
  50. doSth() {
  51. console.log(this.aaa)
  52. return false
  53. }
  54. }
  55. })
  56. ],
  57. methods: {
  58. doSth2() {
  59. this.a++
  60. console.log(this.d)
  61. console.log(this.aa)
  62. this.doSth3()
  63. },
  64. ...store.mapActions(['doSth3'])
  65. }
  66. })

更加具体的使用方法和实现原理我们会在后面的文档和文章中补充完整