mirror of
https://github.com/FlipsideCrypto/DefinitelyTyped.git
synced 2026-02-06 10:56:53 +00:00
* Add superfine types. * Add TSX coverage. * Add missing "key" property. * Superfine looks for a SVG element to start creating SVG elements. This is now enforced through types. * Fix lint. * Fix tests using HTML tags in a SVG context. * Allow empty or single child vnodes. * Allow strings in JSX. * Refactor types. * Lint.
60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
// Type definitions for superfine 7.0
|
|
// Project: https://github.com/jorgebucaran/superfine#readme
|
|
// Definitions by: jameswilddev <https://github.com/jameswilddev>
|
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|
// Minimum TypeScript Version: 3.1
|
|
|
|
export {};
|
|
|
|
type HtmlOrSvgElementTagNameMap = HTMLElementTagNameMap & Pick<SVGElementTagNameMap, Exclude<keyof SVGElementTagNameMap, keyof HTMLElementTagNameMap>>;
|
|
|
|
export type Props<TTagName extends keyof HtmlOrSvgElementTagNameMap> = {
|
|
readonly [TAttributeName in keyof HtmlOrSvgElementTagNameMap[TTagName]]?: HtmlOrSvgElementTagNameMap[TTagName][TAttributeName]
|
|
} & {
|
|
readonly key?: number | string
|
|
};
|
|
|
|
export interface VNode<TTagName extends keyof HtmlOrSvgElementTagNameMap> {
|
|
readonly name: TTagName;
|
|
}
|
|
|
|
type Child<TTagName extends keyof HtmlOrSvgElementTagNameMap> =
|
|
| string
|
|
| VNode<TTagName>;
|
|
|
|
type Children<TTagName extends keyof HtmlOrSvgElementTagNameMap> =
|
|
| Child<TTagName>
|
|
| ReadonlyArray<Child<TTagName>>;
|
|
|
|
export function h(
|
|
tagName: "svg",
|
|
props: Props<"svg">,
|
|
children?: Children<keyof SVGElementTagNameMap>
|
|
): VNode<"svg">;
|
|
|
|
export function h<TTagName extends keyof HTMLElementTagNameMap>(
|
|
tagName: TTagName,
|
|
props: Props<TTagName>,
|
|
children?: Children<(keyof HTMLElementTagNameMap) | "svg">
|
|
): VNode<TTagName>;
|
|
|
|
export function h<TTagName extends keyof SVGElementTagNameMap>(
|
|
tagName: TTagName,
|
|
props: Props<TTagName>,
|
|
children?: Children<keyof SVGElementTagNameMap>
|
|
): VNode<TTagName>;
|
|
|
|
export function patch<TTagName extends keyof HtmlOrSvgElementTagNameMap>(
|
|
rootElement: HtmlOrSvgElementTagNameMap[TTagName],
|
|
vNode: VNode<TTagName>
|
|
): void;
|
|
|
|
declare global {
|
|
namespace JSX {
|
|
interface Element extends VNode<keyof HtmlOrSvgElementTagNameMap> {}
|
|
type IntrinsicElements = {
|
|
readonly [TTagName in keyof HtmlOrSvgElementTagNameMap]: Props<TTagName>
|
|
};
|
|
}
|
|
}
|