在react中使用typescript
常用props ts类型
基础属性类型
type AppProps = {
message: string
count: number
disabled: boolean
names: string[]
status: 'waiting' | 'success'
obj: object
obj2: {
}
obj3: {
id: string
title: string
}
objArr: {
id: string
title: string
}[]
dict1: {
[key: string]: MyTypeHere
}
dict2: Record<string, MyTypeHere>
onSomething: Function
onClick: () => void
onChange: (id: number) => void
onClick(event: React.MouseEvent<HTMLButtonElement>): void
optional?: OptionalType
}
常用React属性类型
export declare interface AppBetterProps {
children: React.ReactNode
functionChildren: (name: string) => React.ReactNode
style?: React.CSSProperties
onChange?: React.FormEventHandler<HTMLInputElement>
}
export declare interface AppProps {
children1: JSX.Element
children2: JSX.Element | JSX.Element[]
children3: React.ReactChildren
children4: React.ReactChild[]
children: React.ReactNode
functionChildren: (name: string) => React.ReactNode
style?: React.CSSProperties
onChange?: React.FormEventHandler<HTMLInputElement>
}
更多用法
const App: react.FC<{
}> = () => [1, 2, 3] as any
const App = ({
message, children}: React.PropsWithChildren<{
message: string}>)
const ref1 = React.useRef<HTMLInputElement>(null)
const ref2 = React.useRef<HTMLInputElement | null>(null)
const handleChange = React.useCallback<
React.ChangeEventHandler<HTMLInputElement>
>(evt => {
console.log(evt.target.value)
}, [])
function tuplify<T extends any[]>(...elements: T) {
return elements
}
function useLoading() {