
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);
npx create-react-app demo(프로젝트명) --template typescript
--template 을 안쓰면 js 템플릿으로 깔립니다.yarn add @types/라이브러리 이름"noImplicitAny" : false
import React from "react";
import styled from "styled-components";
const Container = styled.span``;
interface IProps {
count: number;
}
const Number: React.FunctionComponent<IProps> = ({ count }) => (
<Container>{count}</Container>
);
export default Number;
import React, { Component } from 'react';
import Number from "./Number";
interface IState {
counter: number
}
class App extends Component<{}, IState> {
state = {
counter: 0
};
render() {
const { counter } = this.state;
return <div>
<Number count={counter} /> <button onClick={this.add}>Add</button>
</div>;
}
add = () => {
// this.setState({counter: 'hello'}) // 안된다고 알려줌
this.setState(prev => {
return {
counter: prev.counter + 1
};
});
};
}
export default App;
타입스크립트에서 사용하려면 타입을 지정해주는 부분이 있어야합니다.
class App extends Component {
state = {
counter: 0
};
render() {
const {counter} = this.state;
return <div>{counter}</div>;
}
add = () = > {
this.setState(prev => {
return {
counter: prev.counter + 1
};
});
};
}
import React, { Component } from 'react';
interface IState {
counter: number
}
class App extends Component<{}, IState> {
state = {
counter: 0
};
render() {
const { counter } = this.state;
return <div>{counter}<button onClick={this.add}>click</button></div>;
}
add = () => {
// this.setState({counter: 'hello'}) // 안 된다고 알려줍니다.
this.setState(prev => {
return {
counter: prev.counter + 1
};
});
};
}
export default App;