首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Typescript类型推断在条件类型中不起作用

是因为条件类型是一种特殊的类型,它依赖于条件表达式的结果来确定最终的类型。由于条件类型的计算是在编译时进行的,而类型推断是在编译器根据变量的使用上下文推断出变量类型时进行的,所以类型推断在条件类型中不起作用。

条件类型是Typescript中的高级类型特性,它允许我们根据条件来选择不同的类型。在条件类型中,我们可以使用条件表达式来判断某个类型是否满足特定的条件,然后根据条件的结果来确定最终的类型。

例如,我们可以定义一个条件类型来判断某个类型是否为数组类型:

代码语言:txt
复制
type IsArray<T> = T extends Array<any> ? true : false;

在上面的例子中,如果类型T是数组类型,则条件表达式T extends Array<any>的结果为true,否则为false。根据条件表达式的结果,我们可以确定最终的类型为true或false。

然而,由于类型推断是根据变量的使用上下文进行的,它无法在条件类型中进行推断。这是因为条件类型的计算是在编译时进行的,而类型推断是在编译器根据变量的使用上下文推断出变量类型时进行的。因此,类型推断无法在条件类型中起作用。

对于这种情况,我们可以通过显式地指定类型来解决。例如,我们可以使用类型断言来告诉编译器某个变量的类型:

代码语言:txt
复制
const myArray = [1, 2, 3] as Array<number>;

在上面的例子中,我们使用类型断言as Array<number>来告诉编译器myArray是一个数字数组类型。这样,编译器就不会再尝试推断myArray的类型了。

总结起来,Typescript类型推断在条件类型中不起作用是因为条件类型的计算是在编译时进行的,而类型推断是在编译器根据变量的使用上下文推断出变量类型时进行的。为了解决这个问题,我们可以通过显式地指定类型来解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TypeScript类型推断

当我们TypeScript声明变量但没有明确指定其类型时,TypeScript会尝试根据变量的值进行类型推断。这样可以帮助我们避免手动指定所有类型,使代码更简洁,同时也提供了更好的类型安全性。...TypeScript 推断 y 为 string 类型let z = true; // TypeScript 推断 z 为 boolean 类型在这个例子,我们没有显式地给变量x、y和z指定类型TypeScript...} 类型TypeScript会根据对象字面量的键值对进行类型推断。...42 : "hello";在这个例子,变量value的类型是联合类型number | string。TypeScript根据条件表达式的结果进行类型推断。....`;}let john = { name: "John", age: 30 };let greeting = greet(john);函数greet的参数,我们没有明确指定类型,而是使用了一个匿名对象字面量类型

39100
  • TypeScript 类型注解和类型推断

    一、类型注解(Type annotation) 所谓类型注解,就是人为为一个变量指定类型,例如: const a: number = 123; vscode 鼠标移入 a 出现提示,冒号后面就是类型注解...当不添加类型注解时,TypesScript 也能知道变量 a 是一个数字,这就是 TypeScript类型推断: ?...二、类型推断(Type inference) 所谓类型推断就是 TypeScript 可以通过变量值倒推变量类型,因此绝大部分情况下,我们是不需要去写类型注解的 但有些情况类型推断是无法推断变量类型的...,例如函数的参数: function getSum(a, b) { return a + b; } const num = getSum(1, 2); 上面代码的参数 a,b 就无法类型: ?...; 这样 num 就可以推断类型了: ?

    1.1K30

    TypeScript条件类型

    条件类型(Conditional Types)是TypeScript中一种强大的类型系统特性,它允许我们根据类型关系来推断和选择类型。...根据条件的结果,返回不同的字符串类型。分布式条件类型条件类型还可以联合类型上使用,这称为分布式条件类型。当我们传入一个联合类型的参数时,条件类型会遍历每个成员,并根据条件进行推断。...类型推断条件类型条件类型的最大特点是,它在类型推断时能够根据条件进行智能推断。type MyType = T extends Array ?...条件类型TypeScript类型系统的一个重要部分,它允许我们类型级别上进行条件分支和类型选择。通过巧妙地组合泛型、联合类型条件类型,我们可以定义出非常复杂且强大的类型。...实际应用条件类型通常与内置的预定义条件类型(如Exclude、Extract、NonNullable等)结合使用,以实现更加复杂和有用的类型转换和操作。

    24940

    TypeScript-自动类型推断

    自动类型推断概述不用明确告诉编译器具体是什么类型, 编译器就知道是什么类型根据初始化值自动推断:如果是先定义初始化, 那么是无法自动推断的let value;value = 123;value = false...;value = 'abc';如果是定义的同时初始化, 那么 TS 就会自动进行类型推断let value = 123;value = 456;value = false;value = 'abc';图片如上的...let value = 123; TS 会自动推断为 let value: number = 123; 所以如上的 value 变量只能存储 number 类型的数据,如上是单个数据类型推断,接下来来看一个...联合类型推断:let arr = [1, 'a'];arr = ['a', 'b', 'c', 1, 3, 5, false];如上的 let arr = [1, 'a']; TS 会自动推断为...根据上下文类型自动推断window.onmousedown = (event) => { console.log(event.target);}当我在编译器当中编写了如上的代码之后编译器函数的入参当中的参数后面给了一个提示如下

    22920

    TypeScript条件类型(十)

    TypeScript 2.8版本引入了条件类型(Conditional Types),TS条件类型可以进行类型选择,具体用法可以使用三元运算符实现,JS的三元运算符用法一样,通过判断得到最终结果,TS...条件类型条件类型允许根据一个或多个条件类型进行推断,并且还能在在类型级别上进行复杂的逻辑运算和类型操作。一、基本用法当T类型可以赋值给U类型时,则返回X类型,否则返回Y类型。...| {}> // "function" | "object"二、分布式条件类型条件类型,如果被检查的类型是一个 “裸” 类型参数,即没有被数组、元组或 Promise 等包装过,则该条件类型被称为分布式条件类型...> string | boolean 不是 boolean 类型,也不是其他原始类型四、结合范型使用1.类型删除联合类型T删除联合类型U的成员,T类型的剩余成员则组成新的类型。...never : T;type A = Diff; // "b"联合类型T过滤出联合类型U的成员,过滤出来的成员则组成新的类型

    23420

    《现代Typescript高级教程》类型推断

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 类型推断 TypeScript通过类型推断可以自动推导出变量和表达式的类型,提高代码的可读性和可维护性。...`); } greet("John"); // person的类型推断为string 在上面的示例,函数greet的参数person的类型推断为string,因为函数调用时传入的实参是一个字符串...类型推断和泛型 使用泛型时,TypeScript会根据传入的参数类型推断泛型类型的具体类型。...; // result的类型推断为string 在上面的示例,泛型函数identity的参数value的类型推断为传入的实参 类型,因此返回值的类型也被推断为string。...总结 类型推断TypeScript的一个重要特性,通过自动推导变量和表达式的类型,可以提高代码的可读性和可维护性。

    16130

    TypeScript】TS条件类型(十二)

    TypeScript 2.8版本引入了条件类型(Conditional Types),TS条件类型可以进行类型选择,具体用法可以使用三元运算符实现,JS的三元运算符用法一样,通过判断得到最终结果,TS...条件类型====条件类型允许根据一个或多个条件类型进行推断,并且还能在在类型级别上进行复杂的逻辑运算和类型操作。一、基本用法当T类型可以赋值给U类型时,则返回X类型,否则返回Y类型。...| {}> // "function" | "object"二、分布式条件类型条件类型,如果被检查的类型是一个 “裸” 类型参数,即没有被数组、元组或 Promise 等包装过,则该条件类型被称为分布式条件类型...> string | boolean 不是 boolean 类型,也不是其他原始类型四、结合范型使用1.类型删除联合类型T删除联合类型U的成员,T类型的剩余成员则组成新的类型。...never : T;type A = Diff; // "b"联合类型T过滤出联合类型U的成员,过滤出来的成员则组成新的类型

    23910

    索引类型、映射类型条件类型_TypeScript笔记12

    >取出了Person作为返回值类型,即所谓“拆箱” 三.条件类型 条件类型用来表达非均匀类型映射(non-uniform type mapping),能够根据类型兼容关系(即条件)从两个类型中选出一个...string : number(即条件不确定的情况),因为f(x)x的类型U尚不确定,无从得知U是不是Foo的子类型。...y = x; } 条件类型类型推断 条件类型的extends子句中,可以通过infer声明引入一个将被推断类型变量,例如: type ReturnType = T extends (......R : any; 上例引入了类型变量R表示函数返回类型,并在True分支引用,从而提取出返回类型 P.S.特殊的,如果存在重载,就取最后一个签名(按照惯例,最后一个通常是最宽泛的)进行推断,例如:...TypeScript 还内置了一些常用的条件类型: // 从 T 中去掉属于 U 的子类型的部分,即之前示例的 Diff type Exclude = T extends U ?

    1.7K10

    TypeScript 条件类型精读与实践

    大多数程序,我们必须根据输入做出决策。TypeScript 也不例外,使用条件类型可以描述输入类型与输出类型之间的关系。 本文同步首发在个人博客,欢迎订阅、交流。...用于条件判断时的 extends 当 extends 用于表示条件判断时,可以总结出以下规律 若位于 extends 两侧的类型相同,则 extends 语义上可理解为 ===,可以参考如下例子: type...工具类型 心细的读者可能已经发现了 Demo 类型的声明过程其实就是 TypeScript 官方提供的工具类型 Exclude 的实现原理,其用于将联合类型...true : false) TypeScript类型定义,若在箭头函数中使用 extends 也是同理,由于从左向右的阅读习惯,也会导致阅读者对类型代码的执行顺序感到困惑。...Curry, R> : R) 结合类型推导使用条件类型 TypeScript ,一般会结合 extends 来使用类型推导 infer 语法。使用它可以实现自动推导类型的目的。

    72720

    TypeScript 5.5 ,即将支持自动推断类型守卫!

    TypeScript 带来了强大的类型谓词(type predicates)自动推断能力,预计会在 TypeScript 5.5 版本推出。... TypeScript ,只要对象符合定义的类型约束,那么我们就可以视为他是。...相比之下, TypeScript ,try-catch 则存在很多限制 — 你既不能根据抛出异常的原型定义不同的 catch 块,也不能确定抛出的到底是不是一个异常实例。... TypeScript ,我们可以把鸭子定义成一个类型: interface Duck { quack(): string; } interface Cat { miao(): string...const nums: number[] 毫不夸张的说,我认为这是 TypeScript 最几个版本我觉得最有用的一个特性,其实算是修复了 TypeScript 类型推断的一个长期存在的缺陷,可以让捕获函数类型收窄逻辑变得更加简单

    23710

    TypeScript 官方手册翻译计划【九】:类型操控-条件类型

    项目地址:TypeScript-Doc-Zh,如果对你有帮助,可以点一个 star ~ 本章节官方文档地址:Conditional Types 条件类型 大多数应用的核心中,我们需要基于输入决定执行哪一个逻辑...DogMessageContents = MessageOf; ^ // type DogMessageContents = never 条件类型的真分支...条件类型中进行推断 在上面的例子,我们使用条件类型去应用约束并提取出类型。由于这种操作很常见,所以条件类型提供了一种更简单的方式来完成。...条件类型提供了 infer 关键字,让我们可以推断条件的某个类型,并应用到真分支。...举个例子,在上面的 Flatten 函数,我们可以直接推断出数组元素的类型,而不是通过索引访问“手动”提取出元素的类型: type Flatten = Type extends Array

    80420

    TypeScript 演化史 -- 7】映射类型和更好的字面量类型推断

    对于希望应用程序冻结的每种类型的对象,咱们就必须定义一个包装器函数,该函数接受该类型的对象并返回冻结类型的对象。没有映射类型,咱们就不能以通用的方式静态地使用 Object.freeze()。...方括号,使用了 keyof 操作符。keyof T 将 T 类型的所有属性名表示为字符串字面量类型的联合。 方括号的 in 关键字表示我们正在处理映射类型。...此外,TypeScript 定义了其他映射类型,这些映射类型各种情况下都非常有用。... TypeScript 2.0 类型系统扩展了几个新的字面量类型: boolean 字面量类型 数字字面量 枚举字面量 不带类型注解的 const 变量或 readonly 属性的类型推断为字面量初始化的类型...} 只读类属性只能立即初始化,也可以构造函数初始化。

    2.8K10

    TypeScript类型断言

    本文是关于 TypeScript 的 type assertions 的,它与其他语言中的类型强制转换有相似之处,并通过 as 运算符执行。... B 行,我们看到此类型不允许访问任何属性。 C 行,我们用类型断言(运算符 as)告诉 TypeScript data 是一个Array。现在就可以访问属性 .length 了。...类型断言是不得已的方法,应尽可能的避免。他们(暂时)删除了静态类型系统为我们提供的安全网。 注意, A 行,我们还覆盖了 TypeScript 的静态类型,不过是通过类型注释完成的。...类型断言的替代语法 TypeScript 对于类型断言有另一种“尖括号”语法: 1>data 该语法已经过时,并且与 React JSX 代码( .tsx 文件)不兼容。...也就是说,用静态类型 Dict 覆盖了推断的静态类型 object。

    3.8K40
    领券