给定一个抽象类作为createStore的类型,为什么我的方法calcUtilisation没有定义?如何使用createStore类内的方法来使用数据类型?
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)发布于 2022-08-19 21:13:57
因为store.accounts是一个数组,所以它没有calcUtilisation方法。您应该访问该数组的某些元素,例如:
console.log(store.accounts[0].calcUtilisation)但是,在该事件之后,它将是未定义的,因为此处未定义此方法:
addAccount({ name:"Barclays", creditUsed: 11600, creditLimit: 13600 });对象中传递给addAccount的对象没有calcUtilisation方法。您应该在这个对象中手动指定它,或者创建一个具体的类构造函数来扩展抽象类并在这里创建一个实例,例如:
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 }));https://stackoverflow.com/questions/73422264
复制相似问题