不可变JS记录不会检测与Typescript的接口



我正在尝试使用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());
    

最新更新