instanceof
и т.п. Вообще хоть какой-то способ получить аргументы конструктора класса User есть?
constructor
. Метод с точки зрения js - это просто функция. Имена аргументов функции ни на что снаружи не влияют, и просто являются по сути мапингом по порядку в переменные внутри функции. Имена аргументов функции никак не доступны - точно также, как недоступны поля класса. Единственное что доступно - поле length
функции содержащее количество аргументов(но и оно не учитывает, не может учитывать, ...spread
параметры или использование arguments
).Ctor.toString()
и спарсить их из полученной текстовой репрезентации. Только вид этой текстовой репрезентации ничем не гарантирован(хоть и на данный момент вроде идентичен средь браузеров) и применять такое в проде нельзя.:)AxiosResponse
поле data
имеет неизвестный тип. По умолчанию и для удобства - any
, но на самом деле хрен знает, что там с сервера пришло. Нет там никакого constrictor
точно, потому, что если и придёт там объект - это будет простой примитивный объект.В javascript нет механизма получения полей класса
type Constructor<T = object, Arg = any> = new (...args: Arg[]) => T;
abstract class Api {
public validateRequest<T>(validationModel: Constructor<T>, response : T) : boolean {
// ts не даст сюда попасть если response УЖЕ не соответствует validationModel :)
return true;
}
}
response
имеет тип validationModel
на входе, чего ты конечно никак не можешь знать.:)type Constructor<T = object, Arg = any> = new (...args: Arg[]) => T;
abstract class Api {
public validateRequest<T>(validationModel: Constructor<T>, response: unknown): response is T {
// тут всё сверяем руками или через typia
return true;
}
}
Допустим я в самом методе, который принимает unknown, будут проверять, что пришедшее в метод нечто является объектом и в его прототипе находится Entity, а в иных случаях буду обрабатывать ошибку, но мне всё ещё не ясно, как определить непосредственно список параметров конструктора, с которым и нужно сравнивать ответ пришедший со стороны сервера.
public validateRequest (validationModel: this) : boolean {
return true;
}
// extract public properties withou methods
type Data<T> = {
[K in keyof T as T[K] extends Function ? never : K]: T[K]
}
class Entity {
public validateRequest (validationModel : Data<this>) : boolean {
return true;
}
}
class Book extends Entity {
public id!: bigint;
public name: string = "";
}
const book = new Book();
book.validateRequest({id: 1n, name: ''}) // ok
book.validateRequest({id: 1n}) // err
overflow
надо задавать для "коробки" в которой вся эта тряхомудия лежит, а не самим картинкам, т.е. для .background
или для .container
, при этом, естественно, задав им ширину (100%
?).overflow: hidden
и использовать всегда overflow: clip
, коме тех случаев, когда специфическое поведение hidden
действительно нужно.
blogPosts
: