Use in TypeScript

Let's create a TypeScript project by using create-react-app, then import antd step by step.

We build antd based on latest stable version of TypeScript (>=4.0.0), please make sure your project dependency matches it.

Install and Initialization#

Ensure your system has installed latest version of yarn or npm.

Create a new cra-template-typescript project named antd-demo-ts using yarn.

$ yarn create react-app antd-demo-ts --template typescript

If you are using npm (we will use yarn in the following instructions, it's ok to replace yarn with npm)

$ npx create-react-app antd-demo-ts --template typescript

Then we go inside antd-demo-ts and start it.

$ cd antd-demo-ts
$ yarn start

Open browser at http://localhost:3000/, it renders a header saying "Welcome to React" on the page.

Import antd#

$ yarn add antd

Modify src/App.tsx, import Button component from antd.

import React, { FC } from 'react';
import { Button } from 'antd';
import './App.css';

const App: FC = () => (
  <div className="App">
    <Button type="primary">Button</Button>

export default App;

Add antd/dist/antd.css at the top of src/App.css.

@import '~antd/dist/antd.css';

OK, reboot with yarn start, you should now see a blue primary button displayed on the page. Next you can choose any components of antd to develop your application. Visit other workflows of create-react-app at it's User Guide.

antd is written in TypeScript with complete definitions, try out and enjoy the property suggestion and typing check.

Don't install @types/antd.

Advanced Guides#

In the real world, we usually have to modify default webpack config for custom needs such as themes. We can achieve that by using craco which is one of create-react-app's custom config solutions.

Install craco and modify the scripts field in package.json.

$ yarn add @craco/craco
/* package.json */
"scripts": {
-   "start": "react-scripts start",
-   "build": "react-scripts build",
-   "test": "react-scripts test",
+   "start": "craco start",
+   "build": "craco build",
+   "test": "craco test",

Then create a craco.config.js at root directory of your project for further overriding.

/* craco.config.js */
module.exports = {
  // ...

Customize Theme#

According to the Customize Theme documentation, we need to modify less variables via loader like less-loader. We can use craco-less to achieve that,

First we should modify src/App.css to src/App.less, then import less file instead.

/* src/App.ts */
- import './App.css';
+ import './App.less';
/* src/App.less */
- @import '~antd/dist/antd.css';
+ @import '~antd/dist/antd.less';

Then install craco-less and modify craco.config.js like below.

$ yarn add craco-less
const CracoLessPlugin = require('craco-less');

module.exports = {
  plugins: [
      plugin: CracoLessPlugin,
      options: {
        lessLoaderOptions: {
          lessOptions: {
            modifyVars: { '@primary-color': '#1DA57A' },
            javascriptEnabled: true,

By adding modifyVars option of less-loader here, we should see a green button rendered on the page after rebooting the server now.

We provide built-in dark theme and compact theme in antd, you can reference to Use dark or compact theme.

You could also try react-app-rewired and customize-cra to customize create-react-app webpack config like craco did.

Alternative ways#

Follow manual in Adding TypeScript to setup TypeScript development environment if you already create a project by Use in create-react-app.

Use in create-react-appChange Log