Я новичок в TypeScript или даже в JavaScript, если уж на то пошло. И я пытался обдумать пример от Microsoft о том, как интегрировать аутентификацию AzureAD в реагирующее приложение. В примере используется HOC для аутентификации компонента. Декларация для HOC выглядит так:
function withAuthProvider<T extends React.Component<AuthComponentProps>>(
WrappedComponent: new (props: AuthComponentProps, context?: any) => T
): React.ComponentClass {...}
Большая часть более-менее понятна. Что меня озадачивает, так это тип WrappedComponent
. В частности, я не понимаю, что делает ключевое слово new
в этом контексте.
Может кто-нибудь мне помочь?
🤔 А знаете ли вы, что...
JavaScript позволяет создавать расширения для веб-браузеров, улучшая их функциональность.
Это тип конструктора. Это означает, что когда вы вызываете его с помощью new
, вы можете передать ему аргумент props
и необязательный аргумент context
, и он создаст экземпляр типа T
.
Вот пример:
class Foo {
private value: number;
constructor(x: number, y: number = 1) {
this.value = x + y;
}
}
const foo: new (arg1: number, arg2?: number) => Foo = Foo;
// can be invoked like this (with new)
const x1: Foo = new foo(1);
const x2: Foo = new foo(1, 2);
// cannot be invoked without new
// these lines will error at both compile- and run-time
const y1: Foo = foo(1);
const y2: Foo = foo(1, 2);