Есть ли способ иметь типовую охрану, которая проверяет исключительно типовые метаданные, а не буквальные свойства?Javascript

Форум по Javascript
Ответить
Anonymous
 Есть ли способ иметь типовую охрану, которая проверяет исключительно типовые метаданные, а не буквальные свойства?

Сообщение Anonymous »

У меня есть коробка компонент. Box принимает as prop, которая расширяет elementtype . Однако в результате это может или не может принять классное имя prop

Код: Выделить всё

{/** valid, because `a` (HTMLAnchorElement) accepts a className prop */}
Link

{/** Valid, because it doesn't necessarily _require_ a `className` prop */}
Link

{/** Valid, because no `className` prop was specified and the inline element does not accept a className */}
 (
{children}
)}
>
The blink tag is deprecated


{/** Invalid. The inline element does not accept a className */}
 (
{children}
)}
>
The blink tag is deprecated

Я использую этот поле для создания других компонентов. Предположим, я создаю кнопку < /p>

Код: Выделить всё

function Button(props: ButtonProps) {
const className = extractClassName(props);
return ;
}
< /code>
Я хочу создать функцию, которая попытается извлечь имя класса в объект и распространить ее в коробку, поэтому я сделал что-то вроде этого: < /p>
type HasClassName =
T extends Partial
? Expand
: never;

type ExtractClassName =
T extends Partial
? Expand
: Record;

function hasClassName(props: object): props is HasClassName {
return "className" in props;
}

export function extractClassName(
props: T,
additionalClassNames: U,
): ExtractClassName {
return (
hasClassName(props)
? { className: cx(props.className, additionalClassNames) }
: {}
) as ExtractClassName;
}
< /code>
Проблема, с которой я сталкиваюсь здесь, заключается в этом случае: < /p>
Link
Поскольку тип-гиргарда hasclassname буквально проверяет наличие «classname» , это, как и ожидалось, терпит неудачу. Что я действительно хочу, чтобы охрана типа-это проверить, что сам базовый компонент принимает классную именную именную. Это в типографии, или я недоразумюсь за то, что я не понимаю?


Подробнее здесь: https://stackoverflow.com/questions/796 ... data-not-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»