首页
学习
活动
专区
工具
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 关键字导出每个变量函数

95530

TypeScript 中使用:使用指南

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

15010
  • 全面解析 TypeScript 二三事

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

    10810

    编写高质量可维护代码: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

    27110

    TS 从 0 到 1 -

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

    39810

    前端入门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.8K10

    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.6K20

    TypeScript -

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

    1.2K10

    深入学习下 TypeScript

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

    39K30

    深入学习下 TypeScript

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

    15310

    TS_React:使用来改善类型

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

    5.2K20
    领券