首页
学习
活动
专区
圈层
工具
发布

这几个 TypeScript 类型,90% 的人说不出原因

因为当条件类型的左边是类型参数时,会有 distributive 的性质,也就是把联合类型的每个类型单独传入求值,把每个的结果合并成联合类型,这叫做分布式条件类型。...最后是第四个类型,res 是 never 咋还出来个 never,不是只有 1 和 2 么? 这里确实也是 TS 的特殊处理,当条件类型左边是 never 时,直接返回 never。...接下来再来看第二个类型,当条件类型 + boolean 时: type Test = T extends true ?...然后是第三个类型,当条件类型 + any 时: type Test = T extends true ?...(不得不说,TS 源码的注释写的真不错) 然后就是最后一个类型,当条件类型 + never 时: type Test = T extends true ?

32620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    TypeScript

    // Initialize it x = ['hello', 10]; // OK // Initialize it incorrectly x = [10, 'hello']; // Error 当访问一个已知索引的元素...console.log(x[0].substr(1)); // OK console.log(x[1].substr(1)); // Error, 'number' does not have 'substr' 当访问一个越界的元素...当一个函数没有返回值时,你通常会见到其返回值类型是 void: function warnUser(): void { console.log("This is my warning message...例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。...never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。

    84420

    TypeScript手记(二)

    当访问一个已知索引的元素,会得到正确的类型;当访问一个越界的元素,会使用联合类型替代(以后再说);自从 TyeScript 3.1 版本之后,访问越界元素会报错,我们不应该再使用该特性。...当一个函数没有返回值时,你通常会见到其返回值类型是 void function warnUser(): void { console.log('This is my warning message'...let u: undefined = undefined let n: null = null never never 类型表示的是那些永不存在的值的类型。...例如, never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型;变量也可能是 never 类型,当它们被永不为真的类型保护所约束时。...never 类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是 never 的子类型或可以赋值给never 类型(除了 never 本身之外)。即使 any 也不可以赋值给 never。

    71420

    【Rust 基础篇】Rust Never类型:表示不会返回的类型

    本篇博客将深入探讨Rust中的Never类型,包括Never类型的定义、使用场景、使用方法以及注意事项,以便读者了解如何在Rust中使用Never类型来表示不会返回的情况。 1....使用场景 Never类型主要用于以下场景: 2.1 处理panic 在Rust中,panic是一种错误处理机制,用于在程序发生不可恢复的错误时终止程序的运行。当函数调用了panic!...使用方法 3.1 定义Never类型 要定义Never类型,函数的返回类型直接使用!符号表示。 // 定义Never类型 fn never_returns() -> !...4.2 永远不要返回Never类型 虽然Never类型可以用于表示永远不会返回的情况,但在编写代码时,永远不要返回Never类型。...Never类型通常用于处理panic或者表示程序不会继续执行的情况。使用Never类型时,需要注意永远不要手动返回Never类型。

    85620

    【TypeScript】TS条件类型(十二)

    一、基本用法当T类型可以赋值给U类型时,则返回X类型,否则返回Y类型。T extends U ?...==当分布式条件类型中被检查类型为联合类型,则在运算过程中分解多个分支== 。type typeName = T extends number ?..."X" : "Y" = "X" | "Y"三、非分布式条件类型当T被数组、元组、Promise等包裹时,则运算过程中不会分解成多个分支,则该条件类型为非分布式条件类型。...R : never;定义了FunctionReturnType条件类型,它会检查类型T是否为函数类型,如果是则通过infer获取函数的返回值类型R,否则返回never类型。...T[K] : never;上面代码定义了类型为PropertyType,通过检查K是否是T的一个属性名,如果是则返回该属性类型,否则返回never。

    47810

    TypeScript 中的 extends 怎么那么骚啊?

    2、条件判断 我们可以可以继续衍生,当子类型与父类型符合正常的继承关系时,判断结果为 true,否则为 false。 这里的继承关系,表达的是一种替换关系,或者说是约束力度的缩小。...string : number 这里表达的含义是,当 A 能够替换 B 时,判断结果为 true,否则,判断结果为 false。...interface Yung extends Person { gender: string } interface Student extends Yung { age: string } 也就是说,当...string : number // 没有类型可分配,直接返回 never type A = Pnever> // never 注意他们的不同 type P = [T] extends [string...never : T type b = Exclude 我们来分析一下,首先刚才我们已经知道,当传入的泛型为联合类型时,会先分配再传入 因此,此时传入的联合类型 a 会被拆分传入。

    71610

    Typescript-基础类型

    let x:[string, number]; x=['hello',10]; x=[10,'hello']; // error 当访问一个已知索引的元素,会得到正确的类型: console.log(...--console.log(x[1].substr(1)); // Error,'number' does not have 'substr' 当访问一个越界的元素,会使用联合类型替代: x[3] =...当一个函数没有返回值时,你通常会见到返回值类型是void: function warnUser():void{ console.log("Thisis my warning message");...Never never类型表示的是那些永不存在的值的类型。例如,never类型是那些总是会抛出错误或者根本就不会有返回值的函数表达式或箭头表达式的返回值类型。...变量也可能是never类型,当他们被永不为真的类型保护所约束时。never 是任何类型的子类型,也可以赋值给任何类型。然而,没有类型可以赋值给never类型,即使any也不能赋值给never。 <!

    78230

    TypeScript never 类型

    例如, never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。此外,变量也可能是 never 类型,当它们被永不为真的类型保护所约束时。...= (() => { throw new Error('TypeScript never'); })(); 然而,没有类型是 never 的子类型或可以赋值给 never 类型(除了 never...let baz: never = 123; // 赋值失败,number类型不能赋值给never类型的变量 // 定义never类型变量,接收返回值类型为never类型的函数返回值 let bar:...五、never 类型运算 因为 never 类型为底部类型,所以任意类型与 never 交叉都得到 never: type T1 = number & never; // never type T2...那么如果与 never 类型交叉,则 T 类型的值可以赋给一个 never 类型的变量,那 T 只能是 never 了。

    4.7K10

    系统学习 TypeScript(三)——基础类型

    类型来标记这些变量: let a: any = 12; a = "12"; ---- let list: any[] = [1, true, "free"]; list[1] = 100; 空值 void 当一个数据没有任何类型时...Never never类型表示的是那些永不存在的值的类型。...例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。...never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。...下面是一些返回never类型的函数: // 返回never的函数必须存在无法达到的终点 function error(message: string): never { throw new Error

    82710
    领券