Добавление необнуляемого статического типа в запоминаемые компоненты приводит к ошибке lint, см. Пример для ясности

Пример 1

someStaticProperty значение someStaticProperty , это приведет к ошибке lint

import { NamedExoticComponent, memo } from "react";

type WithComponentId = { componentId: string };

type ScreenComponentStaticMembers = {
  someStaticProperty: string;
};

type AliasedType<P = {}> = NamedExoticComponent<P & WithComponentId> &
  ScreenComponentStaticMembers;

type MyComponentProps = {
  greeting: string;
};

const MyComponent: AliasedType<MyComponentProps> = memo(({ greeting }) => (
  <span>{greeting} there!</span>
));

MyComponent.someStaticProperty = "baz";

Пример 2

Необязательный someStaticProperty , это будет работать.

import { NamedExoticComponent, memo } from "react";

type WithComponentId = { componentId: string };

type ScreenComponentStaticMembers = {
  someStaticProperty?: string;
};

type AliasedType<P = {}> = NamedExoticComponent<P & WithComponentId> &
  ScreenComponentStaticMembers;

type MyComponentProps = {
  greeting: string;
};

const MyComponent: AliasedType<MyComponentProps> = memo(({ greeting }) => (
  <span>{greeting} there!</span>
));

MyComponent.someStaticProperty = "baz";

Всего 1 ответ


У вас есть AliasedType должен быть пересечением NamedExoticComponent<P & WithComponentId> и ScreenComponentStaticMembers и это означает, что AliasedType должен содержать реквизиты как из NamedExoticComponent<P & WithComponentId> и ScreenComponentStaticMembers . Но когда вы создаете переменную MyComponent типа AliasedType вы только назначаете ей объект типа NamedExoticComponent<P & WithComponentId> делая someStaticProperty undefined . Вы только присваиваете значение someStaticProperty на следующей строке.

Чтобы ваш код работал, используйте Object.assign для создания объекта типа AliasedType . Это можно сделать так

const MyComponent: AliasedType<MyComponentProps> = Object.assign({}, 
  memo<MyComponentProps>(({ greeting }) => (
    <span>{greeting} there!</span>
  )),
  { someStaticProperty:"baz" }
)

Есть идеи?

10000