feat: add @types/rax (#43338)

* feat: add @types/rax

* fix: entry

* fix: package name

* fix: header

* fix: tsconfig

* fix: deps

* fix: deps

* chore: name

* fix: tsconfig

* fix: header

* fix: header

* fix: header

* fix: tslint

* fix: tslint

* fix: tslint

* fix: tslint
This commit is contained in:
狒狒神 2020-04-01 07:12:21 +08:00 committed by GitHub
parent 2256b629f3
commit c26df8232d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 3257 additions and 0 deletions

130
types/rax/README.md Normal file
View File

@ -0,0 +1,130 @@
# @types/rax [![npm](https://img.shields.io/npm/v/@types/rax.svg)](https://www.npmjs.com/package/@types/rax)
# Installation
```
npm install --save @types/rax
```
# Config
Add `node_modules/@types/rax` to your tsconifg.json file, like so:
```json
{
"compilerOptions": {
"typeRoots": [
"types",
],
"paths": {
"rax": ["node_modules/@types/rax"]
}
}
}
```
# Usage
## Hooks
```tsx
import * as Rax from 'rax';
const createElement = Rax.createElement;
// FunctionComponent
interface PersonProps {
name: string;
age: number;
}
const Person: Rax.FunctionComponent<PersonProps> = (props) => {
return (
<text>
hello! I'm {props.name} and I'm {props.age} years old!
</text>
);
};
// FunctionComponent With Ref
export interface FancyButtonProps {
onClick: () => void;
children?: Rax.RaxNode;
}
export interface FancyButton {
getClickCount(): number;
}
export const FancyButton = Rax.forwardRef((props: FancyButtonProps, ref: Rax.Ref<FancyButton>) => {
const [count, setCount] = Rax.useState(0);
Rax.useImperativeHandle(ref, () => ({
getClickCount() {
return count;
}
}));
return (
<div
onClick={() => {
setCount(count + 1);
props.onClick();
}}
>
{props.children}
</div>
);
});
interface AppState {
name: string;
age: number;
}
type AppActions = { type: 'getOlder' } | { type: 'resetAge' };
function reducer(s: AppState, action: AppActions): AppState {
switch (action.type) {
case 'getOlder':
return { ...s, age: s.age + 1 };
case 'resetAge':
return { ...s, age: 0 };
}
}
const initialState = {
name: 'Rax',
age: 18
};
export function App() {
const [state, dispatch] = Rax.useReducer(reducer, initialState);
const birthdayRef = Rax.useRef<FancyButton>(null);
Rax.useLayoutEffect(() => {
if (birthdayRef.current !== null) {
birthdayRef.current.getClickCount();
} else {
// this looks redundant but it ensures the type actually has "null" in it instead of "never"
// $ExpectType null
console.log(birthdayRef.current);
}
});
return (
<Rax.Fragment>
<Person {...state} />
<FancyButton
onClick={() => {
if (birthdayRef.current !== null) {
console.log(birthdayRef.current.getClickCount());
}
dispatch({ type: 'getOlder' });
}}
ref={birthdayRef}
>
Birthday time!
</FancyButton>
<FancyButton onClick={() => dispatch({ type: 'resetAge' })}>Let's start over.</FancyButton>
</Rax.Fragment>
);
}
export default App;
```

145
types/rax/global.d.ts vendored Normal file
View File

@ -0,0 +1,145 @@
/*
Warning: all of these interfaces are empty. If you want type definitions for various properties
(such as HTMLInputElement.prototype.value), you need to add `--lib DOM` (via command line or tsconfig.json).
*/
interface Event { }
interface AnimationEvent extends Event { }
interface ClipboardEvent extends Event { }
interface CompositionEvent extends Event { }
interface DragEvent extends Event { }
interface FocusEvent extends Event { }
interface KeyboardEvent extends Event { }
interface MouseEvent extends Event { }
interface TouchEvent extends Event { }
interface PointerEvent extends Event { }
interface TransitionEvent extends Event { }
interface UIEvent extends Event { }
interface WheelEvent extends Event { }
interface EventTarget { }
interface Document { }
interface DataTransfer { }
interface StyleMedia { }
interface Element { }
interface HTMLElement extends Element { }
interface HTMLAnchorElement extends HTMLElement { }
interface HTMLAreaElement extends HTMLElement { }
interface HTMLAudioElement extends HTMLElement { }
interface HTMLBaseElement extends HTMLElement { }
interface HTMLBodyElement extends HTMLElement { }
interface HTMLBRElement extends HTMLElement { }
interface HTMLButtonElement extends HTMLElement { }
interface HTMLCanvasElement extends HTMLElement { }
interface HTMLDataElement extends HTMLElement { }
interface HTMLDataListElement extends HTMLElement { }
interface HTMLDialogElement extends HTMLElement { }
interface HTMLDivElement extends HTMLElement { }
interface HTMLDListElement extends HTMLElement { }
interface HTMLEmbedElement extends HTMLElement { }
interface HTMLFieldSetElement extends HTMLElement { }
interface HTMLFormElement extends HTMLElement { }
interface HTMLHeadingElement extends HTMLElement { }
interface HTMLHeadElement extends HTMLElement { }
interface HTMLHRElement extends HTMLElement { }
interface HTMLHtmlElement extends HTMLElement { }
interface HTMLIFrameElement extends HTMLElement { }
interface HTMLImageElement extends HTMLElement { }
interface HTMLInputElement extends HTMLElement { }
interface HTMLModElement extends HTMLElement { }
interface HTMLLabelElement extends HTMLElement { }
interface HTMLLegendElement extends HTMLElement { }
interface HTMLLIElement extends HTMLElement { }
interface HTMLLinkElement extends HTMLElement { }
interface HTMLMapElement extends HTMLElement { }
interface HTMLMetaElement extends HTMLElement { }
interface HTMLObjectElement extends HTMLElement { }
interface HTMLOListElement extends HTMLElement { }
interface HTMLOptGroupElement extends HTMLElement { }
interface HTMLOptionElement extends HTMLElement { }
interface HTMLParagraphElement extends HTMLElement { }
interface HTMLParamElement extends HTMLElement { }
interface HTMLPreElement extends HTMLElement { }
interface HTMLProgressElement extends HTMLElement { }
interface HTMLQuoteElement extends HTMLElement { }
interface HTMLScriptElement extends HTMLElement { }
interface HTMLSelectElement extends HTMLElement { }
interface HTMLSourceElement extends HTMLElement { }
interface HTMLSpanElement extends HTMLElement { }
interface HTMLStyleElement extends HTMLElement { }
interface HTMLTableElement extends HTMLElement { }
interface HTMLTableColElement extends HTMLElement { }
interface HTMLTableDataCellElement extends HTMLElement { }
interface HTMLTableHeaderCellElement extends HTMLElement { }
interface HTMLTableRowElement extends HTMLElement { }
interface HTMLTableSectionElement extends HTMLElement { }
interface HTMLTemplateElement extends HTMLElement { }
interface HTMLTextAreaElement extends HTMLElement { }
interface HTMLTitleElement extends HTMLElement { }
interface HTMLTrackElement extends HTMLElement { }
interface HTMLUListElement extends HTMLElement { }
interface HTMLVideoElement extends HTMLElement { }
interface HTMLWebViewElement extends HTMLElement { }
interface SVGElement extends Element { }
interface SVGSVGElement extends SVGElement { }
interface SVGCircleElement extends SVGElement { }
interface SVGClipPathElement extends SVGElement { }
interface SVGDefsElement extends SVGElement { }
interface SVGDescElement extends SVGElement { }
interface SVGEllipseElement extends SVGElement { }
interface SVGFEBlendElement extends SVGElement { }
interface SVGFEColorMatrixElement extends SVGElement { }
interface SVGFEComponentTransferElement extends SVGElement { }
interface SVGFECompositeElement extends SVGElement { }
interface SVGFEConvolveMatrixElement extends SVGElement { }
interface SVGFEDiffuseLightingElement extends SVGElement { }
interface SVGFEDisplacementMapElement extends SVGElement { }
interface SVGFEDistantLightElement extends SVGElement { }
interface SVGFEDropShadowElement extends SVGElement { }
interface SVGFEFloodElement extends SVGElement { }
interface SVGFEFuncAElement extends SVGElement { }
interface SVGFEFuncBElement extends SVGElement { }
interface SVGFEFuncGElement extends SVGElement { }
interface SVGFEFuncRElement extends SVGElement { }
interface SVGFEGaussianBlurElement extends SVGElement { }
interface SVGFEImageElement extends SVGElement { }
interface SVGFEMergeElement extends SVGElement { }
interface SVGFEMergeNodeElement extends SVGElement { }
interface SVGFEMorphologyElement extends SVGElement { }
interface SVGFEOffsetElement extends SVGElement { }
interface SVGFEPointLightElement extends SVGElement { }
interface SVGFESpecularLightingElement extends SVGElement { }
interface SVGFESpotLightElement extends SVGElement { }
interface SVGFETileElement extends SVGElement { }
interface SVGFETurbulenceElement extends SVGElement { }
interface SVGFilterElement extends SVGElement { }
interface SVGForeignObjectElement extends SVGElement { }
interface SVGGElement extends SVGElement { }
interface SVGImageElement extends SVGElement { }
interface SVGLineElement extends SVGElement { }
interface SVGLinearGradientElement extends SVGElement { }
interface SVGMarkerElement extends SVGElement { }
interface SVGMaskElement extends SVGElement { }
interface SVGMetadataElement extends SVGElement { }
interface SVGPathElement extends SVGElement { }
interface SVGPatternElement extends SVGElement { }
interface SVGPolygonElement extends SVGElement { }
interface SVGPolylineElement extends SVGElement { }
interface SVGRadialGradientElement extends SVGElement { }
interface SVGRectElement extends SVGElement { }
interface SVGStopElement extends SVGElement { }
interface SVGSwitchElement extends SVGElement { }
interface SVGSymbolElement extends SVGElement { }
interface SVGTextElement extends SVGElement { }
interface SVGTextPathElement extends SVGElement { }
interface SVGTSpanElement extends SVGElement { }
interface SVGUseElement extends SVGElement { }
interface SVGViewElement extends SVGElement { }
interface Text { }
interface TouchList { }
interface WebGLRenderingContext { }
interface WebGL2RenderingContext { }

2942
types/rax/index.d.ts vendored Normal file

File diff suppressed because it is too large Load Diff

6
types/rax/package.json Normal file
View File

@ -0,0 +1,6 @@
{
"private": true,
"dependencies": {
"csstype": "^2.2.0"
}
}

23
types/rax/tsconfig.json Normal file
View File

@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true,
"jsx": "preserve"
},
"files": [
"index.d.ts"
]
}

11
types/rax/tslint.json Normal file
View File

@ -0,0 +1,11 @@
{
"extends": "dtslint/dt.json",
"rules": {
"dt-header": false,
"no-empty-interface": false,
"no-object-literal-type-assertion": false,
"no-unnecessary-generics": false,
"strict-export-declare-modifiers": false,
"void-return": false
}
}