首页 > 解决方案 > 使用构造函数赋值的不同行为的关键

问题描述

我正在使用构造函数赋值遇到“keyof”的不同行为......

这是代码

class Class1 {
constructor(private a: number, private b: string) {
}
method1() {
    console.log("method1");
    }
}

class Class2 {
    a: number;
    b: string;
    constructor() {
    }
    method1() {
        console.log("method1");
    }
}

type Cet1Props = keyof Class1; // "method1"
type Class2Props = keyof Class2; // "a" | "b" | "method1"

我不明白为什么会这样,有人可以解释一下吗?

谢谢!!

标签: typescriptconstructorkeyof

解决方案


Class2它们是公共的(这是默认设置),而它们Class1是私有的。

为了使它们具有可比性(即证明它与构造函数赋值无关),将私有访问修饰符添加到Class2(或更改Class1为使它们public)。

class Class2 {
    private a: number;
    private b: string;

    constructor() {
    }

    method1() {
        console.log("method1");
    }
}

如果ab成员是私有的,您将获得:

type Class2Props = keyof Class2;  // "method1"

推荐阅读