Skip to main content

Typescript

Creating a New React App with TypeScript​

npx create-react-app my-app --template typescript

Adding Typescript to an existing project​

npm install --save typescript @types/node @types/react @types/react-dom @types/jest

Next, rename any file to be a TypeScript file (e.g. src/index.js to src/index.tsx)

VS Code TypeScript warnings​

If you see TypeScript warnings in VS Code, try setting this…

References​

Basic Component​

When defining the class constructor, be sure to include the call to super(props).

Blog: ‘React.createClass’ vs ‘extends React.Component’: https://ultimatecourses.com/blog/react-create-class-versus-component

React.createClass​

import * as React from "react";

const ComponentName= React.createClass({
render() {
return (
<h1>Some Content</h1>
);
}
});

export default ComponentName;

React.Component​

import * as React from "react";

class ComponentName extends React.Component {
render() {
return (
<h1>Some Content</h1>
);
}
}

export default ComponentName;
import * as React from "react";

class Bookmark extends React.Component {
render() {
const url = this.props.url;

// Conditional logic that builds the <a /> tag if a url has been specified
let linkElem;

if (typeof url === "string" && url.length) {
const urlDisplayText =
typeof this.props.urlDisplayText === "string" &&
this.props.urlDisplayText.length
? this.props.urlDisplayText
: url;

linkElem = (
<a href={url} target="_blank">
{urlDisplayText}
</a>
);
}

return (
<div className="bookmark">
<h1>
Bookmark: {this.props.bookmarkTitle || "No title specified"}
</h1>
{linkElem}
</div>
);
}
}

export default Bookmark;
import * as React from "react";

class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}

render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}

ReactDOM.render(
<Clock />,
document.getElementById('root')
);

Adding Properties​

import * as React from "react";
import { Component } from "react";
import PropTypes from "prop-types";

class Controls extends Component {

render() {
const { resetLabel, incrementLabel, decrementLabel, increment, decrement, resetCount } = this.props;

return (
<div className="controls">
<div onClick={() => {increment();}}>
<span>{incrementLabel}</span>
</div>
<div onClick={() => {resetCount(0);}}>
<span>{resetLabel}</span>
</div>
<div onClick={() => {decrement();}}>
<span>{decrementLabel}</span>
</div>
</div>
);
}
}

Controls.propTypes = {
increment: PropTypes.func,
decrement: PropTypes.func,
resetCount: PropTypes.func,
resetLabel: PropTypes.string,
incrementLabel: PropTypes.string,
decrementLabel: PropTypes.string,
};

Controls.defaultProps = {
resetLabel: "RESET",
incrementLabel: "+",
decrementLabel: "-"
};

export default Controls;