定义如下
export interface Options<T> { serializer?: (value: T) => string; deserializer?: (value: string) => T; defaultValue?: IFunction<T> | T;}
使用
if (typeof options.defaultValue === "function") { options.defaultValue();}
出现下面的报错:
为什么在使用typeof的情况下ts对类型判断还是有问题?平常在消费联合类型的时候,都只需要借助typeof就能达到缩小类型范围的目的,但是这里没有效果,我想问下什么时候会出现这种问题?
我知道解决方案:
但是不知道什么时候需要这么去解决,只有报错的时候才会尝试这么去解决,恳求大佬解惑。
T
也可能是个函数,例如Options<(name: string) => void>
那这时候用typeof
来收缩函数,就有两个不同签名得函数了,编译器自然无法处理改怎么调用
可以单独限制下defaultValue
泛型为函数得情况:
type MaybeFunction<T> = T extends Function ? never : T | IFunction<T>export interface Options<T> { serializer?: (value: T) => string; deserializer?: (value: string) => T; defaultValue?: MaybeFunction<T>}
当代码里没有确定类型的时候就需要,断言告诉ts这是一个函数,比如在你的例子中这个函数是可选的可能不存在,再比如这个变量类型要求是number或者string,然后变量直接调用string的方法就会报错,此时就需要断言
本节介绍类型断言,有使用关键字 as 和标签 <> 两种方式,因后者会与JSX 语法冲突,建议统一使用 as 来进行类型断言。 1. 慕课解释 TypeScript 允许你覆盖它的推断,毕竟作为开发者你比编译器更了解你写的代码。 类型断言主要用于当 TypeScript 推断出来类型并不满足你的需求,你需要手动指定一个类型。 2. 关键字 as 当你把 JavaScript 代码迁移到 TypeS
TypeScript 类型检查机制包含三个部分: 类型推断 类型保护 类型兼容性 本节介绍其中的类型推断,类型推断主要用于那些没有明确指出类型的地方帮助确定和提供类型,这是 TypeScript 的一种能力。 类型推断是有方向的,要注意区分从左向右和从右向左两种推断的不同应用。 1. 慕课解释 类型推断的含义是不需要指定变量类型或函数的返回值类型,TypeScript 可以根据一些简单的规则推断其
编辑:OK,在typescript规范中有详细说明:类型断言
在文件 /src/stores/otpInfos.ts 的第 7 行,TypeScript 报出以下错误(但是执行 pnpm dev 运行是没有任何问题的): 如果没有引用 ".pnpm/@vueuse+shared@9.13.0_vue@3.3.4/node_modules/@vueuse/shared",则无法命名 "useOTPInfosStore" 的推断类型。这很可能不可移植。需要类型注
我想解决的是res.Code下面的红线问题 下面是loginApi接口的类型定义: 其中UserType类型的定义: IResponse类型的定义: 为什么Promise的返回值Code,Data,Msg下面都带红线? 代码: