typescript - VueJS字符串插值可以访问TS对象的私有(private)属性

标签 typescript vue.js vuejs2 vuex

嗨,我最近开始使用 typescript 学习 vuejs 我使用 typescript 创建了一个模型类,其中有一些私有(private)属性,据说只能通过 getters 访问并将其放入 vuex 存储中

但是在字符串插值( mustache )中,不知何故我可以在没有 getter 的情况下获取私有(private)属性

请看下面我的代码, 谢谢!

User.ts

import { Stock } from "./Stock";

export class User {
  private _funds: number;
  private _portofolio: Array<Stock>;

  constructor() {
    this._funds = 5000;
    this._portofolio = [];
  }
  public updateFunds(by: number): void {
    this._funds += by;
  }
  get portofolio(): Array<Stock> {
    return this._portofolio;
  }
}

store/index.ts(vuex 加载)

import Vue from "vue";
import Vuex from "vuex";
import { User } from "@/models/User";

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    user: new User()
  },
  getters: {
    currentUser: state => {
      return state.user;
    }
  },
  mutations: {},
  actions: {},
  modules: {}
});

App.vue(vue主文件)


<template>
  <div id="app">
        <p>Funds: {{ user._funds }}</p>
  </div>
</template>

<script lang="ts">
import Vue from "vue";

export default Vue.extend({
  data: function() {
    return {
      user: this.$store.getters.currentUser
    };
  },
  created: function() {
    console.log(this.user);
  }
});
</script>

最佳答案

TypeScript 私有(private)成员可以在运行时自由访问。他们带有下划线,可以将他们与公共(public)成员区分开来。如果不应该访问它们,请不要访问它们。对于有风格指南的团队来说,这是可以禁止的。

TypeScript 可见性在编译时进行检查。 Vue 加载器 doesn't provide TypeScript support for templates 。有vue-type-check为模板提供 TS 类型检查的第三方实用程序。

关于typescript - VueJS字符串插值可以访问TS对象的私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61168562/

相关文章:

typescript - 如何为接口(interface)声明中不存在的属性指定类型

reactjs - 抽象 React 组件状态中的 TypeScript 交集类型导致只读错误

javascript - Vue.js 计时计算与纯 JavaScript 版本不匹配

javascript - 使用 vuex 更新数据

javascript - 重置表单状态 VueJS 和 VueRouter

angularjs - 在 Typescript 中创建 AngularJS 1.5 组件的最佳实践是什么?

TypeScript - 以类型安全的方式传递接口(interface)的字段名

javascript - Vue.js - 插值错误 - 如何将样式重新设计为 v-bind :style?

javascript - 检查 prop 是否通过验证

vuejs2 - vuejs 组件创建等待数据首先加载