首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript + Solid JS抽象类

TypeScript + Solid JS抽象类
EN

Stack Overflow用户
提问于 2022-08-19 21:07:06
回答 1查看 32关注 0票数 0

给定一个抽象类作为createStore的类型,为什么我的方法calcUtilisation没有定义?如何使用createStore类内的方法来使用数据类型?

代码语言:javascript
复制
abstract class Account  {
  abstract name: String;
  abstract creditUsed: number;
  abstract creditLimit: number;

  public calcUtilisation() {
    return (this.creditUsed / this.creditLimit) * 100;
  }
}

interface State {
  accounts: [Account] | []
}

const [store, setStore] = createStore<State>({
  accounts: []
});

const addAccount: Store<State> = (account: Account) => {
  setStore({...store, accounts: [
    ...store.accounts,
    account
  ]});

  return store;
}

addAccount({ name:"Barclays", creditUsed: 11600, creditLimit: 13600 });

console.log(store.accounts.calcUtilisation)
EN

回答 1

Stack Overflow用户

发布于 2022-08-19 21:13:57

因为store.accounts是一个数组,所以它没有calcUtilisation方法。您应该访问该数组的某些元素,例如:

代码语言:javascript
复制
console.log(store.accounts[0].calcUtilisation)

但是,在该事件之后,它将是未定义的,因为此处未定义此方法:

代码语言:javascript
复制
addAccount({ name:"Barclays", creditUsed: 11600, creditLimit: 13600 });

对象中传递给addAccount的对象没有calcUtilisation方法。您应该在这个对象中手动指定它,或者创建一个具体的类构造函数来扩展抽象类并在这里创建一个实例,例如:

代码语言:javascript
复制
class ConcreteAccount extends Account {
  constructor(accountObject) {
    this.name = accountObject.name;
    this.creditUsed = accountObject.creditUsed;
    this.creditLimit = accountObject.creditLimit;
  }
}

addAccount(new ConcreteAccount({ name:"Barclays", creditUsed: 11600, creditLimit: 13600 }));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73422264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档