Тип Typescript для получения свойств класса из метода stati c в родительском классе - PullRequest
0 голосов
/ 19 февраля 2020

Допустим, у вас есть эти два класса:

class Form {
    static fields(){
       return []; // some magic happens here
    }
}

class UserForm extends Form{
    email: string;
}

const formFields = UserForm.fields();

Какой тип можно добавить для метода stati c fields, чтобы получить список UserForm свойств, в данном случае , только свойство email как ("email")[]?

Я пытался использовать keyof T, но он не дает мне желаемого ответа:

static fields<T>(this: T): (keyof T)[] {
       return []; // some magic happens here
    }

Это возвращает ("prototype" | "fields")[] вместо ("email")[].

У вас есть идеи, как решить эту проблему?

Спасибо!

1 Ответ

0 голосов
/ 19 февраля 2020

Вы можете создать новый экземпляр this и вернуть Object.getOwnPropertyNames(instance)

class Form {
    foo: string = 'bar'
    static fields<T>(): (keyof T)[]{
       return Object.getOwnPropertyNames(new this) as (keyof T)[]
    }
}

class UserForm extends Form{
    email: string = '';
}

const formFields = UserForm.fields<UserForm>();
console.log(formFields)

Рабочий проект repl.it: https://repl.it/@HarunYlmaz / ts-property-list

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...