type AppProps = {
title: string;
id: number;
disabled: boolean;
}
const App = (props: AppProps) => {
...
}
type AppProps = {
status: "success" | "failure";
userType: "user" | "admin" | "guest";
}
const App = (props: AppProps) => {
...
}
type AppProps = {
obj: {
id: string,
title: string
};
dict: {
[key: string]: MyType;
};
}
const App = (props: AppProps) => {
...
}
✅ Dict
- Dict는 사전형 타입으로, key-value 쌍을 이루는 객체이다.
- TypeScript에서는
Record<string, MyType>
과 같이 작성 가능함.
type AppProps = {
onClick: () => void;
onChange: (id: number) => void;
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
onClick(event: React.MouseEvent<HTMLButtonElement>): void;
}
const App = (props: AppProps) => {
...
}
함수 Type 표현
- 호출 시그니처:
(arg: number): void
- 타입 표현식:
(arg: number) => void
- 제네릭 함수:
function returnValue<Type>(arr: <Type>): Type { return arr; }
props
로 전달할 때예시>
// 부모 컴포넌트
const ParentComponent = () => {
const [userName, setUserName] = useState('');
return (
<ChildComponent setUserName={setUserName} />
)
}
// 자식 컴포넌트
type Props = {
setUserName: React.Dispatch<React.SetStateAction<string>>;
// string 대신 다른 type을 대입하면 OK
}
const ChildComponent = (props: Props) => {
const changeState = (e) => {
setUserName(e.target.value);
}
return (
<input
...
onChange={changeState}
/>
)
}
interface AppProps {
children?: React.ReactNode;
childrenElement: React.JSX.Element;
style?: React.CSSProperties;
onChange?: React.FormEventHandler<HTMLInputElement>;
props: Props & React.ComponentPropsWithoutRef<"button">; // not forwards ref
}
type ReactNode = ReactElement | string | number | ReactFragment | ReactPortal | boolean | null | undefined;
컴포넌트
만을 허용. (type, props, key 존재)ReactElement
를 상속받은 Interface.ReactElement
를 이용하자.