react hook 里使用TS笔记

2021-03-11  本文已影响0人  折叠幸福

最近接手开发react PC端项目,TS使用笔记记录

1.写TS像写go一样要指定一个类型 变量名:类型名,或者函数参数绑定一个接口类型声明

2.当给解构函数参数指定类型的时候,在函数外部声明,在内部相当于起别名了


image.png image.png

可能有多种类型时,用或连接


image.png

3.引入.tsx文件
比如目录为 father/index.tsx
要引入 应写

import('../father/index')

而不能写

import('../father/index.tsx')

4.引入JS 文件,但JS文件定义的类型不合理


image.png

一般是修改JS文件,如果不能修改JS可以用// @ts-ignore忽略
如果是在render里的报错 ,可以在文件头加// @ts-nocheck

5.不能将类型XXX分配给never[]
一般是修改useState为空数组的时候会报错,
需要注释或断言数组类型,比如声明为any或者具体类型

useState<any[]>([])
interface LOL {
    name: string
}

export function useTestLOL() {
    const [lol, setLoL] = useState<LOL[]>([])
    function change() {
        setLoL([...lol, { name: 'hello world' }])
    }
    return change
}

6.不能以.tsx文件结尾
webpack.config.js配置如下


image.png

增加默认导入文件类型

7.类型断言
在上下文中当类型检查器无法断定类型时,一个新的后缀表达式操作符 ! 可以用于断言操作对象是非 null 和非undefined 类型。
比如 变量 A string ;被函数 FA调用
let a string
function FA(url:string){...}
FA(a)
新的需求 变量A需要用一个函数FB处理下再被FA函数调用,但是FB函数的入参是string/undefined
直接处理后会报类型错误,需要加个!进行类型断言非空,或者用as直接指定类型
let a string
FB(url?:string){...}
let b = FB(a)
或者 let b = FB(a) as string
function FA(url:string){...}
FA(b!)

上一篇下一篇

猜你喜欢

热点阅读