Ключ к другому поведению с помощью конструктора - PullRequest
0 голосов
/ 26 ноября 2018

Я испытываю другое поведение "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"

Я могу 'не понимаю, почему это так, может кто-нибудь объяснить мне?

Спасибо !!

1 Ответ

0 голосов
/ 26 ноября 2018

В Class2 они являются общедоступными (что по умолчанию), тогда как в Class1 они являются частными.

Чтобы сделать их сопоставимыми (т.е. доказать, что это не имеет ничего общего с присваиванием конструктора)добавьте модификатор личного доступа к Class2 (или измените Class1, чтобы сделать их public).

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

    constructor() {
    }

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

Если члены a и b являются личными, вы получите:

type Class2Props = keyof Class2;  // "method1"
...