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
действительно нужно. 0%
считается от родителя, но у родителя величина не задана, потому он не знает как считать процент и сбрасывает на значение по умолчанию - auto
,
a) У
AxiosResponse
полеdata
имеет неизвестный тип. По умолчанию и для удобства -any
, но на самом деле хрен знает, что там с сервера пришло. Нет там никакогоconstrictor
точно, потому, что если и придёт там объект - это будет простой примитивный объект.б) Как я сказал выше:
Тебе просто не с чем сравнивать.
Ты можешь только руками создать тупо массивчик с именами полей и по ним пройтись. Или можешь использовать библиотеку, чтоб она, условно, сделала этот массивчик за тебя неявно на этапе компиляции(с сопутствующими накладными расходами, само собой).