Предполагая, что я бы сделал конструктор функционального класса с TypeA
: некоторый аргумент и TypeB
: тип самого класса, я могу использовать
functionName(argument: TypeA): TypeB {
this.property = argument;
return this;
}
но не может использовать
property: (argument: TypeA): TypeB => ({
property: argument,
...
})
Я понимаю, что это связано с разницей в this
, когда я использую функцию стрелки и нормальную функцию.
Тогда, как я могу использовать функцию стрелки, которая будет работать как первый случай с нормальной функцией?
Пример:
import personConst from './personConst';
// const personConst: { [key: string]: UnitBase } = {
// brah: {
// name: "Thomas",
// age: 25,
// gender: "male"
// },
// hoge: {
// name: "Sarah",
// age: 29,
// gender: "female"
// },
// ...
// }
import { PersonBase } from './PersonBase';
// export interface UnitBase {
// name: string;
// age: number;
// gender: string;
// }
interface Person extends PersonBase {
income: number;
zip: number;
setIncome(newIncome: number): this;
setZip(newZip: number): this;
}
const person = (key: string): Person => ({
income: 50000,
zip: 50000,
setIncome: (newHp: number): Person => ({
income: newIncome,
... // Error: Expression expected.
}),
setZip(newZip: number): Person {
this.zip = newZip;
return this; // OK
},
...personConst[key]
});
export default person;