我正在尝试使用Immutable 3.8.1运行Typescript。
import { Record } from "immutable";
class Person extends Record({
name: "viktor" as string,
}) {
getName() {
return this.name;
}
}
const person = new Person({ name: "petko" });
console.log(person.getName());
该代码产生以下错误:
Property 'name' does not exist on type 'Person'.
5 | }) {
6 | getName() {
> 7 | return this.name;
| ^^^^
8 | }
9 | }
但它确实编译并运行。但是,当我尝试在getName声明(在类主体中(上添加name: string;
时,错误会消失,但getName()
每次都返回undefined。我做错了什么?
我在TS方面没有那么先进,但如果我做对了,问题是尽管属性name
确实存在于类型Person
上,但TypeScript编译器并不知道它,因为它是在运行时动态创建的。
所以,你有两种方法:
-
使用不可变记录的
get
函数读取值:import { Record } from "immutable"; class Person extends Record({ name: "viktor" as string, }) { getName() { return this.get("name"); } } const person = new Person({ name: "petko" }); console.log(person.getName());
-
铸造至
any
:import { Record } from "immutable"; class Person extends Record({ name: "viktor" as string, }) { getName() { return (<any> this).name; } } const person = new Person({ name: "petko" }); console.log(person.getName());