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

【TypeScript】004-类型推论 与 联合类型

3、类型推论 如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。...事实上,它等价于: ​```typescript let myFavoriteNumber: string = 'seven'; myFavoriteNumber = 7; // index.ts(...TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论。...访问联合类型的属性或方法 当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法: function getLength(something...(); } 联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型: let myFavoriteNumber: string | number; myFavoriteNumber = 'seven

4800

深度讲解TS:这样学TS,迟早进大厂【07】:联合类型

访问联合类型的属性或方法§ 当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法: function getLength(something...上例中,length 不是 string 和 number 的共有属性,所以会报错。...访问 string 和 number 的共有属性是没问题的: function getString(something: string | number): string { return something.toString...(); } 联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型: let myFavoriteNumber: string | number; myFavoriteNumber = 'seven...上例中,第二行的 myFavoriteNumber 被推断成了 string,访问它的 length 属性不会报错。

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

    TypeScript学习笔记(二)—— TypeScript基础

    ,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。...当我们引用一个在此类型上不存在的属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,数字类型的变量 foo 上是没有 length 属性的,故 TypeScript 给出了相应的错误提示。 这种错误提示显然是非常有用的。...上面的例子中,我们需要将 window 上添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 上不存在 foo 属性。...,就不会有任何问题,故「子类可以被断言为父类」 需要注意的是,这里我们使用了简化的父类子类的关系来表达类型的兼容性,而实际上 TypeScript 在判断类型的兼容性时,比这种情况复杂很多,详细请参考[

    5.1K20

    深度讲解TS:这样学TS,迟早进大厂【11】:类型断言

    当我们引用一个在此类型上不存在的属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,数字类型的变量 foo 上是没有 length 属性的,故 TypeScript 给出了相应的错误提示。 这种错误提示显然是非常有用的。...上面的例子中,我们需要将 window 上添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 上不存在 foo 属性。...此时我们可以使用 as any 临时将 window 断言为 any 类型: (window as any).foo = 1; 在 any 类型的变量上,访问任何属性都是允许的。...,就不会有任何问题,故「子类可以被断言为父类」 需要注意的是,这里我们使用了简化的父类子类的关系来表达类型的兼容性,而实际上 TypeScript 在判断类型的兼容性时,比这种情况复杂很多,详细请参考[

    1.3K20

    【TypeScript】007-类型断言

    当我们引用一个在此类型上不存在的属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,数字类型的变量 foo 上是没有 length 属性的,故 TypeScript 给出了相应的错误提示。 这种错误提示显然是非常有用的。...上面的例子中,我们需要将 window 上添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 上不存在 foo 属性。...此时我们可以使用 as any 临时将 window 断言为 any 类型: (window as any).foo = 1; 在 any 类型的变量上,访问任何属性都是允许的。...,就不会有任何问题,故「子类可以被断言为父类」 需要注意的是,这里我们使用了简化的父类子类的关系来表达类型的兼容性,而实际上 TypeScript 在判断类型的兼容性时,比这种情况复杂很多,详细请参考[

    3600

    在 Vue 中使用 TypeScript 的一些思考(实践)

    使用 JavaScript 时,这并没有什么不对的地方,但当你使用 TypeScript 时,这有点不足,我们并不能得到有关于 someProp 更多有用的信息(比如它含有某些属性),甚至在 TypeScript...这意味着我们可以使用 someProp 上的任意属性(存在或者是不存在的)都可以通过编译。为了防止此种情况的发生,我们将会给 Prop 添加类型注释。...,当指定 type 类型为 Object 构造函数时,经过 Vue 的声明文件处理,TypeScript 推断出为 any 类型的原因: interface ObjectConstructor {...而类做为 TypeScript 特殊的存在(它既可以作为类型,也可以作为值),当我们使用 vue-class-component 并通过 $refs 绑定为子类组件时,便能获取子组件上暴露的类型信息:...当我尝试在 .vue 文件中导入已存在或者不存在的 .vue 文件时,却得到不同的结果: 文件不存在时: ? 文件存在时: ? 文件不存在时,引用 Vue 的声明文件。

    3.3K30

    【TypeScript】009-内置对象

    10、内置对象 JavaScript 中有很多内置对象,它们可以直接在 TypeScript 中当做定义好了的类型。 内置对象是指根据标准在全局作用域(Global)上存在的对象。...我们可以在 TypeScript 中将变量定义为这些类型: let b: Boolean = new Boolean(1); let e: Error = new Error('Error occurred...TypeScript 核心库的定义文件 TypeScript 核心库的定义文件中定义了所有浏览器环境需要用到的类型,并且是预置在 TypeScript 中的。...当你在使用一些常用的方法的时候,TypeScript 实际上已经帮你做了很多类型判断的工作了,比如: Math.pow(10, '2'); // index.ts(1,14): error TS2345...事实上 Math.pow 的类型定义如下: interface Math { /** * Returns the value of a base expression taken to

    7500

    关于TypeScript中的泛型,希望这次能让你彻底理解

    但是这里有个问题,我们的 propertyName 参数被定义为字符串类型,这看似没问题,但它可能会导致我们不小心传入了不存在于类型 T 的项的属性名。...这样一来,如果你尝试传递一个不正确的字段或者错误类型的值给 setUserField 函数,TypeScript编译器会提供类型错误的提示,从而减少运行时错误的可能性。...如果我们尝试将这个HOC应用于没有 style 属性的组件,TypeScript会抛出一个错误。 这种模式非常有用,因为它可以保证我们的HOC在类型安全的同时,也不限制组件的其他属性。...TypeScript中的类型推断 TypeScript有一个令人惊叹的特性——它会尝试从上下文中推断出类型,只要有可能。...比如,在代码中看到这样的语句时: const a: number = 12; 这意味着开发者可能并不知道TypeScript已经知道a是一个从值推断出来的数字类型。

    17210

    全网最全的,最详细的,最友好的 Typescript 新手教程

    any是一个“松散的”TypeScript类型。这意味着:这个变量可以是任何类型:字符串,布尔值,对象,真的,我不在乎。这实际上就像根本没有类型检查一样。...事实上,如果你把types.js的扩展改为types。你会在IDE中看到TypeScript在抱怨。...url"属性不存在类型字符串TypeScript。...看看我们的代码,我们可以想到一个简单的“模型”,命名为Link,对象的形状应该符合以下模式: 它必须有一个类型为string的url属性 在TypeScript中,你可以用一个接口来定义这个“模型”,就像这样...那么在接口和类型之间应该使用什么呢?我更喜欢复杂对象的接口。TypeScript文档也建议了一种方法: 因为软件的理想属性是对扩展开放的,所以如果可能的话,应该始终在类型别名上使用接口。

    6.1K40

    深度讲解TS:这样学TS,迟早进大厂【13】:内置对象

    内置对象是指根据标准在全局作用域(Global)上存在的对象。这里的标准是指 ECMAScript 和其他环境(比如 DOM)的标准。...我们可以在 TypeScript 中将变量定义为这些类型: let b: Boolean = new Boolean(1); let e: Error = new Error('Error occurred...TypeScript 核心库的定义文件§ TypeScript 核心库的定义文件中定义了所有浏览器环境需要用到的类型,并且是预置在 TypeScript 中的。...当你在使用一些常用的方法的时候,TypeScript 实际上已经帮你做了很多类型判断的工作了,比如: Math.pow(10, '2'); // index.ts(1,14): error TS2345...事实上 Math.pow 的类型定义如下: interface Math { /** * Returns the value of a base expression taken to

    68130

    TypeScript 5.4:带来新的类型和一些 Break Change

    中是一个常见的类型推断过程,基于我们可能进行的某些检查或条件,TypeScript 能够自动推断出变量的具体类型,这就使得该变量的类型范围被“缩小”或者说“窄化”。...其实也是属于类型收窄的一种。 工具类型:NoInfer 在 TypeScript 中,有时候我们写代码的时候不需要明确告诉它变量是什么类型,TypeScript 会自动根据我们给的值来推断出类型。...; 又可以让 TypeScript 自己推断 T 的类型: doSomething("hello!"); 但是,这种情况可能有个问题,有时候并不清楚应该推断出什么类型才是 “最准确” 的类型。...这可能会导致 TypeScript 错误地拒绝有效的调用,还会接受有问题的调用,或者在捕获到错误时报告不正确的异常信息。...这样有时会允许一些在逻辑上应该出错的代码通过类型检查。 而在新版的 TypeScript 5.4 中,类型系统变得更加严谨和精确了。

    32810

    比较Go、Rust、Scala、Java、Kotlin、Python、Typescript 和 Elm中的编译器错误

    调用不存在的方法或函数 我们首先调用一个不存在的方法或函数。 Java 有一个简单明了的错误消息,尽管 cannot find symbol 消息不太清楚(为什么你丢失了符号?)...我们还得到了一个错误编号 TS2339。遗憾的是,在 Google 上搜索该编号没有找到更多信息。此外,Typescript 不会显示有问题的行或受影响的类型。...$ npx tsc typescript/Error1.ts typescript/Error1.ts(4,11): error TS2339: Property 'notThere' does not...第二部分更有用,因为它建议使用 String(嘿,告诉我使用“hello”)在 42(仍然认为 String 丢失了)之前。我认为这不是一个很好的错误消息。...所以 42 也可能是错误的。 这里不正确,但有帮助的是提示 Hint: Want to convert a String into an Int?

    15010

    TypeScript 4.8 发布!重点新特性解读

    主要体现在联合类型、交叉类型以及类型收窄的工作方式上。...例如,unknown 在本质上其实接近联合类型 {}| null | undefined,因为它可以接受 null、undefined 和任何其他类型。...这个写法上稍为有点复杂了,因为要多判断一次第一个元素是否为字符串类型,所以需要多写一次三元运算符,所以 TypeScript 4.7 引入了更简洁的语法 infer 和 extends 可以配合使用:...U : never; TypeScript 4.8 对在模版字符串中使用 infer extends 的情况进行了优化,下面这种情况 infer 以前会被约束为一个原始类型,现在可以推断出更精确的值:...这种行为是不正确的,因为在 ECMAScript 模块下,不存在的值的命名导入和导出可能会导致运行时错误。

    87320

    【项目总结】TypeScript基础

    前言 本篇博客用于补充在商城后台管理系统中出现的 TypeScript 知识点。 知识整理 TypeScript解决了JavaScript存在的很多设计缺陷,尤其是关于类型检测的。...JavaScript;(babel编译器的使用) 变量声明 在TypeScript中定义变量需要指定 标识符 的类型。...,我们更希望可以通过TypeScript本身的特性帮助我们推断出对应的变量类型: let message = "Hello World" // 在一个变量第一次赋值时,ts会根据后面的赋值内容的类型,来推断出变量的类型...的基础上新增了一些数据类型。...手段:我们可以对any类型的变量进行任何的操作,包括获取不存在的属性、方法;赋值任何的值,比如数字、字符串的值。

    65610

    TypeScript

    TypeScript 是什么 TypeScript 是 JavaScript 的超集 ?...当我们向 window 添加一个 foo 时,会报错示我们 window 上不存在 foo 属性。...当然,现在的编译器足够聪明,调用的时候可以不传递类型,编译器可以自己识别的 传递类型时,这个类型在函数中使用时的方法/属性,必须是存在的,或者继承自某个接口。...这里我有意使用不同的变量名,以表明类型值沿链向上传播,且与变量名无关。 #泛型约束 确保属性存在 当我们在函数中获取length属性,在类型为number时,是没有length的,所以会报错。...return arg; } 检查对象上的键是否存在 先认识 keyof 操作符 #泛型参考文章 掘金-一文读懂 TypeScript 泛型及应用( 7.8K字) #tsconfig.json {

    1.8K10
    领券