diff --git a/app/javascript/mastodon/components/icon.jsx b/app/javascript/mastodon/components/icon.jsx
deleted file mode 100644
index d3d7c591d..000000000
--- a/app/javascript/mastodon/components/icon.jsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import classNames from 'classnames';
-
-export default class Icon extends React.PureComponent {
-
- static propTypes = {
- id: PropTypes.string.isRequired,
- className: PropTypes.string,
- fixedWidth: PropTypes.bool,
- };
-
- render () {
- const { id, className, fixedWidth, ...other } = this.props;
-
- return (
-
- );
- }
-
-}
diff --git a/app/javascript/mastodon/components/icon.tsx b/app/javascript/mastodon/components/icon.tsx
new file mode 100644
index 000000000..d85fff6ef
--- /dev/null
+++ b/app/javascript/mastodon/components/icon.tsx
@@ -0,0 +1,14 @@
+import React from 'react';
+import classNames from 'classnames';
+
+type Props = {
+ id: string;
+ className?: string;
+ fixedWidth?: boolean;
+ children?: never;
+ [key: string]: any;
+}
+export const Icon: React.FC = ({ id, className, fixedWidth, ...other }) =>
+ ;
+
+export default Icon;
diff --git a/app/javascript/mastodon/components/icon_with_badge.jsx b/app/javascript/mastodon/components/icon_with_badge.jsx
deleted file mode 100644
index 4214eccfd..000000000
--- a/app/javascript/mastodon/components/icon_with_badge.jsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import Icon from 'mastodon/components/icon';
-
-const formatNumber = num => num > 40 ? '40+' : num;
-
-const IconWithBadge = ({ id, count, issueBadge, className }) => (
-
-
- {count > 0 && {formatNumber(count)}}
- {issueBadge && }
-
-);
-
-IconWithBadge.propTypes = {
- id: PropTypes.string.isRequired,
- count: PropTypes.number.isRequired,
- issueBadge: PropTypes.bool,
- className: PropTypes.string,
-};
-
-export default IconWithBadge;
diff --git a/app/javascript/mastodon/components/icon_with_badge.tsx b/app/javascript/mastodon/components/icon_with_badge.tsx
new file mode 100644
index 000000000..487bf326a
--- /dev/null
+++ b/app/javascript/mastodon/components/icon_with_badge.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import { Icon } from './icon';
+
+const formatNumber = (num: number): number | string => num > 40 ? '40+' : num;
+
+type Props = {
+ id: string;
+ count: number;
+ issueBadge: boolean;
+ className: string;
+}
+const IconWithBadge: React.FC = ({ id, count, issueBadge, className }) => (
+
+
+ {count > 0 && {formatNumber(count)}}
+ {issueBadge && }
+
+);
+
+export default IconWithBadge;