Skip to content

Commit 375127e

Browse files
committed
transition anys
1 parent 9442cbd commit 375127e

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

__tests__/window.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { JSDOM } from 'jsdom';
2+
import type { DOMWindow } from 'jsdom';
23

34
const jsdom = new JSDOM('<!doctype html><html><body><div id="mount"></div></body></html>', {
45
url: 'https://nytimes.com',
56
});
67
const { window } = jsdom;
78

8-
function copyProps(src: any, target: any) {
9+
function copyProps(src: DOMWindow, target: typeof globalThis) {
910
const props = Object.getOwnPropertyNames(src)
11+
// @ts-ignore
1012
.filter(prop => typeof target[prop] === 'undefined')
1113
.reduce(
1214
(result, prop) => ({

src/index.tsx

+18-11
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export * from './types';
1717
export { default as HelmetData } from './HelmetData';
1818
export { default as HelmetProvider } from './Provider';
1919

20+
type Props = { [key: string]: any };
21+
2022
export class Helmet extends Component<PropsWithChildren<HelmetProps>> {
2123
static defaultProps = {
2224
defer: true,
@@ -52,10 +54,10 @@ export class Helmet extends Component<PropsWithChildren<HelmetProps>> {
5254
}
5355

5456
flattenArrayTypeChildren(
55-
child: any,
56-
arrayTypeChildren: any,
57-
newChildProps: any,
58-
nestedChildren: any
57+
child: JSX.Element,
58+
arrayTypeChildren: { [key: string]: JSX.Element[] },
59+
newChildProps: Props,
60+
nestedChildren: ReactNode
5961
) {
6062
return {
6163
...arrayTypeChildren,
@@ -69,7 +71,12 @@ export class Helmet extends Component<PropsWithChildren<HelmetProps>> {
6971
};
7072
}
7173

72-
mapObjectTypeChildren(child: any, newProps: any, newChildProps: any, nestedChildren: any) {
74+
mapObjectTypeChildren(
75+
child: JSX.Element,
76+
newProps: Props,
77+
newChildProps: Props,
78+
nestedChildren: ReactNode
79+
) {
7380
switch (child.type) {
7481
case TAG_NAMES.TITLE:
7582
return {
@@ -97,7 +104,7 @@ export class Helmet extends Component<PropsWithChildren<HelmetProps>> {
97104
}
98105
}
99106

100-
mapArrayTypeChildrenToProps(arrayTypeChildren: any, newProps: any) {
107+
mapArrayTypeChildrenToProps(arrayTypeChildren: { [key: string]: JSX.Element }, newProps: Props) {
101108
let newFlattenedProps = { ...newProps };
102109

103110
Object.keys(arrayTypeChildren).forEach(arrayChildName => {
@@ -110,7 +117,7 @@ export class Helmet extends Component<PropsWithChildren<HelmetProps>> {
110117
return newFlattenedProps;
111118
}
112119

113-
warnOnInvalidChildren(child: any, nestedChildren: any) {
120+
warnOnInvalidChildren(child: JSX.Element, nestedChildren: ReactNode) {
114121
invariant(
115122
VALID_TAG_NAMES.some(name => child.type === name),
116123
typeof child.type === 'function'
@@ -133,24 +140,24 @@ export class Helmet extends Component<PropsWithChildren<HelmetProps>> {
133140
return true;
134141
}
135142

136-
mapChildrenToProps(children: any, newProps: any) {
143+
mapChildrenToProps(children: ReactNode, newProps: Props) {
137144
let arrayTypeChildren = {};
138145

139-
React.Children.forEach(children, child => {
146+
React.Children.forEach(children as JSX.Element, (child: ReactElement) => {
140147
if (!child || !child.props) {
141148
return;
142149
}
143150

144151
const { children: nestedChildren, ...childProps } = child.props;
145152
// convert React props to HTML attributes
146-
const newChildProps = Object.keys(childProps).reduce((obj: any, key) => {
153+
const newChildProps = Object.keys(childProps).reduce((obj: Props, key) => {
147154
obj[HTML_TAG_MAP[key] || key] = childProps[key];
148155
return obj;
149156
}, {});
150157

151158
let { type } = child;
152159
if (typeof type === 'symbol') {
153-
type = type.toString();
160+
type = (type as 'symbol').toString();
154161
} else {
155162
this.warnOnInvalidChildren(child, nestedChildren);
156163
}

0 commit comments

Comments
 (0)