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

在TypeScript中执行不带泛型的函数后保留变量的类型

,可以通过类型推断和类型保护的特性来实现。

类型推断是指TypeScript根据代码上下文自动推断变量的类型。当我们执行一个不带泛型的函数时,TypeScript会根据函数的返回值推断出变量的类型。例如:

代码语言:txt
复制
function add(a: number, b: number): number {
  return a + b;
}

const result = add(1, 2); // result的类型被推断为number

在这个例子中,由于add函数的返回值类型被指定为number,TypeScript会推断出result的类型也为number。

另外,我们还可以使用类型保护来显式地保留变量的类型。类型保护是一种在特定条件下缩小变量类型范围的机制。在执行不带泛型的函数后,我们可以使用类型保护来判断变量的类型,并在条件满足时进行类型缩小。例如:

代码语言:txt
复制
function doSomething(value: number | string): void {
  if (typeof value === 'number') {
    // 在这个条件块中,value的类型被缩小为number
    console.log(value.toFixed(2)); // 可以调用number类型的方法
  } else {
    // 在这个条件块中,value的类型被缩小为string
    console.log(value.toUpperCase()); // 可以调用string类型的方法
  }
}

doSomething(3.14159); // 输出3.14
doSomething('hello'); // 输出HELLO

在这个例子中,通过typeof操作符判断value的类型是number还是string,从而在不同的条件块中对value进行操作。

综上所述,通过类型推断和类型保护的特性,我们可以在TypeScript中执行不带泛型的函数后保留变量的类型。这样可以提高代码的可读性和类型安全性。

相关链接:

  • TypeScript官方文档:https://www.typescriptlang.org/
  • TypeScript类型推断:https://www.typescriptlang.org/docs/handbook/type-inference.html
  • TypeScript类型保护:https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在 TypeScript 中,如何导入一个默认导出的变量、函数或类?

在 TypeScript 中,如何导入一个默认导出的变量、函数或类?...在 TypeScript 中,如果要导入一个默认导出的变量、函数或类,可以使用 import 关键字结合 default 关键字来引用默认导出的成员。.../file'; customFunction(); // 调用默认导出的函数 在上述代码中,import 语句使用 default 关键字引入了 file.ts 文件中的默认导出的函数。...在 TypeScript 中,如何在一个文件中同时导出多个变量或函数? 在 TypeScript 中,使用 export 关键字来同时导出多个变量或函数。有几种常见的方式可以实现这一点。...方式一:逐个导出 在一个文件中逐个使用 export 关键字导出每个变量或函数。

1.1K30

在 TypeScript 中使用泛型:使用指南

明白 TypeScript 中的泛型 泛型 Generics 不仅仅是 TypeScript 中的一个基本概念,在很多现代编程语言中也存在。...其核心是,TypeScript 泛型语法允许在尖括号内 内定义一个类型变量。这个类型变量随后可以在组件(比如函数或者类定义)中被使用,在事先不知道该类型是什么的情况下强制执行一致的类型使用。...[0]; } 在上面的函数中,类型变量 T 代表数组元素类型,允许函数使用的数组元素可以是数字,字符串,甚至复杂的对象,与此同时保留类型信息。...通过这个方法,这能函数能放心使用将会存在的传递过来的参数的 length 属性。 泛型中使用 keyof TypeScript 中 keyof 操作符可以在泛型中结合使用,来确保属性名的类型安全。...请记得,在深思熟虑后,将它整合到我们的开发流程中,并享受正确使用它们所产生的类型安全和可维护性代码的乐趣。

16910
  • 全面解析 TypeScript 泛型的二三事

    在 TypeScript 中,泛型通过在类、接口和函数的声明中引入类型变量来实现。...其实可以简单理解为 泛型 是一种 类型的占位定义泛型函数参数的泛型定义在函数中使用泛型,常用于约束函数参数的类型。...,这样就能安全地在 函数体内执行相关的属性或方法如果我们传递的类型不满足约束条件时, TS 就会在运行的阶段会提示我们,这样可以避免我们产生后续的 bug泛型的默认类型泛型的默认类型和参数的默认类型一样...,也是通过 = 来声明一个泛型的默认类型使用默认类型,可以让我们在调用的时候,如果不传递类型给泛型,泛型也能获取到默认类型应用到具体的变量约束上。...infer 在泛型中的应用在泛型中,我们经常会使用 infer 对泛型做进一步的类型推定, 进一步将范围进行缩小,推断到我们想要的类型。

    11810

    编写高质量可维护的代码:Awesome TypeScript

    Typescript VS Javascript JavaScript JavaScript 是动态类型语言,在代码编译阶段不会对变量进行类型检测,从而会把潜在的类型错误带到代码执行阶段。...并且在代码执行阶段,不允许不同类型变量之间的赋值。 清晰的类型注解,不仅让代码的可读性更好,同时也增强了 IDE 的能力,包括代码补全、接口提示、跳转到定义等等。...类型注解 TypeScript 通过类型注解提供编译时的静态类型检查,可以在编译阶段就发现潜在 Bug,同时让编码过程中的提示也更智能。使用方式很简单,在 : 冒号后面注明变量的类型即可。...泛型允许同一个函数接受不同类型参数,相比于使用 Any 类型,使用泛型来创建的组件可复用和易扩展性要更好,因为泛型会保留参数类型。泛型可以应用于接口、类、变量。...使用大写字母 A-Z 定义的类型变量都属于泛型,常见泛型变量如下: T(Type):表示一个 TypeScript 类型 K(Key):表示对象中的键类型 V(Value):表示对象中的值类型 E(Element

    2.4K10

    TypeScript:一个好泛型的价值

    泛型是种一旦理解就乐在其中的概念,所以让我只是先从这样描述它开始吧: 泛型之于类型(Types),犹类型之于变量也 换言之,泛型为你提供了一种不用指定特别某种类型就能使用若干类型的方式。...TypeScript 泛型来拯救 正如我曾 尝试 说的那样:一个泛型就像若干类型的一个变量,这意味着我们可以定义一个表示任何类型的变量,同时能保持住类型信息。后者是关键,因为那正是 any 做不到的。...这不单让我们定义了一个可被任意类型使用的函数,现在相关的变量也将保留你所选择类型的正确信息。如下: ? 图片中两件事情值得注意: 我直接在函数名之后(在 之间)指定了类型。...] } 这就对了,我们现在有了两个泛型,后一个被声明为继承自前一个中的键,但本质上的好处是你现在不再受限于某一种具体类型(即 Person 类型的对象) 了,该函数可被你放心大胆地用于任何类型或结构了...这是因为借助泛型,处理类逻辑完全被封装进了一个泛型类中,从而我们可以约束类型并创建指定类型的类,这样的类只对动物类型生效。你也可以在此添加额外的行为,而类型信息也得以保留。

    1.5K20

    TS 进阶 - 泛型

    # 类型别名中的泛型 类型别名中如果声明了泛型占位,那其实就等价于一个接受参数的函数: type Factory = T | number | string; // 伪代码理解 // function...在基于参数类型进行填充泛型时,其类型信息会被推断到尽可能精确的程度。因为传入一个值时,这个值是不会再被修改的,因此可以推导到最精确的程度。如果使用变量作为参数,那么会使用这个变量标注的类型。...'Cell' handle(age); // number 填充变量类型为 number 箭头函数中的泛型: const handle = (input: T): T => {}; 在...中的泛型和函数中的泛型类似,只是函数中泛型参数的消费方式参数和返回值类型,Class 中的泛型消费方则是属性、方法、乃至装饰器等。..._list; } } # 内置方法中的泛型 TypeScript 中为非常多的内置对象都预留了泛型占位,如 Promise: function p() { return new Promise

    27310

    TS 从 0 到 1 - 泛型

    在 C# 和 Java 中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。这样用户就可以以自己的数据类型来使用组件。...设计泛型的关键目的是在成员之间提供有意义的约束,这些成员可以是:类的实例成员、类的方法、函数参数、函数返回值。 泛型是允许同一个函数接受不同类型参数的一种模板。...和 any 相比,使用泛型来创建可复用的组件要更好,因为泛型会保留参数类型。...中的 T 称类型变量,是希望传递给 identity 函数的类型占位符,同时它被分配给 value 参数来代替它的类型。...T 代表 Type,在定义泛型时通常用作第一个类型变量名称。实际上 T 可以用任何有效名称代替。

    40610

    前端入门25-福音 TypeScript声明正文-TypeScript

    TypeScript 中的数据类型是用于类型声明服务的,类似于 Java 中定义变量或声明方法的返回值时必须指定一个类型。...类型声明 ES5 中声明变量是通过 var,而 ES6 中引入块级作用域后新增了 let 和 const 的声明方式,TypeScript 建议声明变量时,都使用 let,因为 var 会很容易造成很多问题...在类型声明一节中说过,声明一个变量的类型时,也可以声明为函数类型,而函数本质上也是对象,所以,如果有需求是需要区分多个不同的函数是否属于同一个类别的函数时,也可以用接口来实现,如: interface...泛型 Java 里在操作实体数据时,经常会需要用到泛型,但 JavaScript 本身并不支持泛型,不过 TypeScript 支持,比如: interface Adapter { data...用法基本跟 Java 类似,函数泛型、类泛型、泛型约束等。

    3.2K21

    从 JavaScript 到 TypeScript

    使用 TypeScript 的原因 JavaScript 是一门弱类型语言,变量的数据类型具有动态性,只有执行时才能确定变量的类型,这种后知后觉的认错方法会让开发者成为调试大师,但无益于编程能力的提升,...TypeScript 的类型机制可以有效杜绝由变量类型引起的误用问题,而且开发者可以控制对类型的监控程度,是严格限制变量类型还是宽松限制变量类型,都取决于开发者的开发需求。...定义后完成后,我们可以像使用其它接口一样使用这个函数类型的接口。...在像 C# 和 Java 这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。...初探泛型 如下代码,我们给 Hello 函数添加了类型变量 T ,T 帮助我们捕获用户传入的类型(比如:string)。我们把这个版本的 Hello 函数叫做泛型,因为它可以适用于多个类型。

    1.5K40

    【TypeScript 演化史 — 第七章】映射类型和更好的字面量类型推断

    需要 freezePoint 函数。对于希望在应用程序中冻结的每种类型的对象,咱们就必须定义一个包装器函数,该函数接受该类型的对象并返回冻结类型的对象。...: 用一个名为 T 的类型参数定义了一个泛型 Readonly。...因为 Readonly 类型是泛型的,所以咱们为T提供的每种类型都正确地入了Object.freeze() 中。...从类型别名开始: type ReadonlyPoint = Readonly; 现在,咱们可以在 Readonly 中为泛型类型 T 的替换 Point 类型: type ReadonyPoint...在 TypeScript 2.0 中,类型系统扩展了几个新的字面量类型: boolean 字面量类型 数字字面量 枚举字面量 不带类型注解的 const 变量或 readonly 属性的类型推断为字面量初始化的类型

    3.8K40

    了不起的 TypeScript 入门教程

    之后,可恶的错误消息又消失了,因为这时 result 变量的类型是 string 类型。在 TypeScript 中除了可以重载普通函数之外,我们还可以重载类中的成员方法。...设计泛型的关键目的是在成员之间提供有意义的约束,这些成员可以是:类的实例成员、类的方法、函数参数和函数返回值。 泛型(Generics)是允许同一个函数接受不同类型参数的一种模板。...相比于使用 any 类型,使用泛型来创建可复用的组件要更好,因为泛型会保留参数类型。...对刚接触 TypeScript 泛型的小伙伴来说,看到 T 和 E,还有 K 和 V 这些泛型变量时,估计会一脸懵逼。...下面我们介绍一下一些常见泛型变量代表的意思: T(Type):表示一个 TypeScript 类型 K(Key):表示对象中的键类型 V(Value):表示对象中的值类型 E(Element):表示元素类型

    7K52

    类型即正义,TypeScript 从入门到实践(四):5000字长文带你重新认识泛型

    相信你已经有答案了,这就是我们这一节要引出的重点:“泛型” ,我将它称之为 “类型的函数”,对应 JS 的函数一样,声明一个 “类型变量”,然后在类型函数代码块里面可以使用这个 “类型变量”。...因为我们将这个函数泛型化了,明确了泛型变量 T 是一个明确类型,所以我们之前的 info.length 会报错,当然这里有同学会问了,我要是这里 T 在之后泛型 (类型的函数)调用的时候传入的是 string...类型函数的使用 上面我们定义了第一个泛型 - “类型的函数”,接下来我们来尝试使用我们的泛型,在 src/index.ts 中对代码做出对应的修改如下: function getTutureTutorialsInfo...泛型是在调用时再限定类型 我们在定义泛型的时候,是一系列类型变量,如 T 、 U 等,这些变量实际的类型我们在定义的时候是不知道的,只有在进行泛型调用的时候,由用户给定实际的类型,所以这里有一种延迟声明类型的作用...在之前的内容中,我们通过命名函数来讲解了泛型,那么匿名函数如何使用泛型了?

    1.7K20

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

    需要 freezePoint 函数。对于希望在应用程序中冻结的每种类型的对象,咱们就必须定义一个包装器函数,该函数接受该类型的对象并返回冻结类型的对象。...: 用一个名为 T 的类型参数定义了一个泛型 Readonly。...因为 Readonly 类型是泛型的,所以咱们为T提供的每种类型都正确地入了Object.freeze() 中。...从类型别名开始: type ReadonlyPoint = Readonly; 现在,咱们可以在 Readonly 中为泛型类型 T 的替换 Point 类型: type ReadonyPoint...在 TypeScript 2.0 中,类型系统扩展了几个新的字面量类型: boolean 字面量类型 数字字面量 枚举字面量 不带类型注解的 const 变量或 readonly 属性的类型推断为字面量初始化的类型

    2.9K10

    TS 进阶 - 类型系统

    、类型系统与类型检查 类型 限制数据的可用操作、意义、允许的值的集合,即访问限制与赋值限制 在 TypeScript 中即原始类型、对象类型、函数类型、字面量类型等基础类型,以及类型别名、联合类型等经过类型编程后得到的类型...类型系统 一组为变量、函数等结构分配、实施类型的规则,通过显式地指定或类型推导来分配类型 同时类型系统定义了如何判断类型之间的兼容性:在 TypeScript 中即结构化类型系统 类型检查 确保类型遵循类型系统下的类型兼容性...条件类型绝大部分场景下会和泛型一起使用,泛型参数实际类型会在实际调用时才会被填充,而条件类型在这基础上,可以基于填充后的泛型参数做进一步的类型操作: type LiteralType = T extends...: 类型参数需要是一个联合类型 类型参数需要通过泛型参数的方式传入,不能直接进行条件类型判断 条件类型中的泛型参数不能被包裹 条件类型分布式特性的作用: 将联合类型拆开,每个分支分别进行一次条件类型判断...TypeScript 的类型推导除了依赖开发者的输入,如变量声明、函数逻辑、类型保护等。

    1.2K50

    Typescript真香秘笈

    如果给变量赋予与其声明类型不兼容的值,就会有报错提示。 例如: Array 数组类型 在typescript中,有两种声明数组类型的方式。...泛型在强类型语言中很常见,泛型支持在编写代码时候使用类型参数,而不必在一开始确定某种特定的类型。...arg.length : 0; } 当然,您可能觉得这两点在javascript中都可以轻易做到,根本不需要泛型。是的,泛型本身是搭配强类型食用更佳的,在弱类型下没意义。...在typescript中,泛型有几种打开方式: 泛型函数: function someFunction(arg: T) : T { return arg; } console.log(someFunction...我们思考一下,在javascript中,一个对象是不是可能有多重身份。 例如说,一个函数,它可以作为一个普通函数执行,它也可以是一个构造函数。同时,函数本身也是对象,它也可以有自己的属性。

    5.7K20

    TypeScript - 泛型

    从上面的信息概括为泛型是支持多种类型的变量,根据用户需求灵活的变动,达到复用的效果。 在实际开发中,函数是同样的逻辑,只是因为类型的不同,可能要再写一个函数,这样的问题很糟糕。...因为类型参数相当于变量,我们不必在函数定义时就定义类型,而是执行时由使用者规定类型。...尖括号内的变量名并不是固定的,可以自定义,一般都是大写 泛型类 泛型类实例化传入的泛型类型,可以在整个作用域中使用该泛型类型,但要注意的是类的静态属性无法使用泛型类型 class Handsome泛型参数的默认类型 在 TypeScript 2.3 以后,我们可以为泛型中的类型参数指定默认类型。当使用泛型时没有在代码中直接指定类型参数,从实际值参数中也无法推测出时,这个默认类型就会起作用。...,不难发现泛型的强大,可变的类型变量和泛型约束为 TypeScript 的类型推导都提供了很大的贡献。

    1.2K10

    深入学习下 TypeScript 中的泛型

    在今天的内容中,我们将尝试 TypeScript 泛型的真实示例,并探索它们如何在函数、类型、类和接口中使用。...这会根据提供给 pickObjectKeys 的参数强制执行返回类型,从而允许函数在知道需要强制执行的特定类型之前灵活地强制执行类型结构。...这显示在以下屏幕截图中: 了解如何在 TypeScript 中创建泛型后,您现在可以继续探索在特定情况下使用泛型。本教程将首先介绍如何在函数中使用泛型。...使用泛型创建条件类型 在本节中,您将尝试 TypeScript 中泛型的另一个有用功能:创建条件类型。首先,您将了解条件类型的基本结构。...结论 在本教程中,我们探索适用于函数、接口、类和自定义类型的泛型,以及使用了泛型来创建映射类型和条件类型。 这些都使泛型成为您在使用 TypeScript 时可以随意使用的强大工具。

    39K30

    深入学习下 TypeScript 中的泛型

    在今天的内容中,我们将尝试 TypeScript 泛型的真实示例,并探索它们如何在函数、类型、类和接口中使用。...这会根据提供给 pickObjectKeys 的参数强制执行返回类型,从而允许函数在知道需要强制执行的特定类型之前灵活地强制执行类型结构。...这显示在以下屏幕截图中:了解如何在 TypeScript 中创建泛型后,您现在可以继续探索在特定情况下使用泛型。本教程将首先介绍如何在函数中使用泛型。...由于 someFunction 变量的类型是函数,因此条件类型将评估条件的真实分支。这将返回类型 U 作为结果。 类型 U 是从函数的返回类型推断出来的,在本例中是布尔值。...结论在本教程中,我们探索适用于函数、接口、类和自定义类型的泛型,以及使用了泛型来创建映射类型和条件类型。 这些都使泛型成为您在使用 TypeScript 时可以随意使用的强大工具。

    17810

    TS_React:使用泛型来改善类型

    ❝主要的「区别」是 在 JavaScript 中,关心的是变量的「值」 在 TypeScript 中,关心的是变量的「类型」 ❞ 关于我们的User类型,它的状态属性太模糊了。...除了 T 之外,以下是常⻅泛型变量代表的意思: K(Key):表示对象中的键类型; V(Value):表示对象中的值类型; E(Element):表示元素类型。...箭头函数在jsx中的泛型语法 在前面的例子中,我们只举例了如何用泛型定义常规的函数语法,而不是ES6中引入的箭头函数语法。...在正常的 TypeScript 中,不需要使用这种变通方法。 ---- 泛型示例:useState 先让我们来看看 useState 的函数类型定义。...首先定义了一个函数(useState)它接受一个叫做S的泛型变量 这个函数接受一个也是唯一的一个参数:initialState(初始状态) 这个初始状态可以是一个类型为 S(传入泛型)的变量,也可以是一个返回类型为

    5.2K20
    领券