首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深度讲解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 类型的变量上,访问任何属性都是允许的。...上面的例子中,我们也可以通过[扩展 window 的类型(TODO)][]解决这个错误,不过如果只是临时的增加 foo 属性,as any 会更加方便。

    1.7K20

    【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 类型的变量上,访问任何属性都是允许的。...上面的例子中,我们也可以通过**扩展 window 的类型(TODO)**解决这个错误,不过如果只是临时的增加 foo 属性,as any 会更加方便。

    46100

    细数这些年被困扰过的 TS 问题

    好的,下面我们来开始介绍第一个问题 —— 如何在 window 对象上显式设置属性。...一、如何在 window 对象上显式设置属性 对于使用过 JavaScript 的开发者来说,对于 window.MyNamespace = window.MyNamespace || {}; 这行代码并不会陌生...' does not exist on type 'Window & typeof globalThis'.(2339) 以上异常信息是说在 Window & typeof globalThis 交叉类型上不存在...很明显 Combinable 和 number 类型的对象上并不存在 split 属性。问题又来了,那如何解决呢?这时我们就可以利用 TypeScript 提供的函数重载。...7.3 {} 类型 {} 类型描述了一个没有成员的对象。当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误。

    16.2K73

    TypeScript

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

    2.3K10

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

    当我们引用一个在此类型上不存在的属性或方法时,就会报错: 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 类型的变量上,访问任何属性都是允许的。...上面的例子中,我们也可以通过[扩展 window 的类型(TODO)][]解决这个错误,不过如果只是临时的增加 foo 属性,as any 会更加方便。

    5.9K20

    9102年,隔壁公司新来的女实习生问我什么是TypeScript ?

    所谓的超集 其实就是最终将你写的TypeScript编译成javascript去执行,因为浏览器上能跑的脚本语言是javascript,这个本质要搞清楚 传统的Javascript 缺点: 1.弱类型,...2.不依赖插件,无法感知编码书写是否出现边际错误(出现某一瞬间空值等) 特别是ES6之前存在全局变量,var会给全局状态下添加属性以及污染全局加上ES5的变量提升作用域等混合情况,很容易导致变量查找时出现...这里特别注意,TS里面的静态类型,以及枚举等,编译成js后是不存在的 上面并没有体现typeScript的特殊价值 TypeScript的核心原则之一是对值所具有的结构进行类型检查。...webpack 4.39版配置typeScript TS最基础关键的核心思想,已经介绍完了 我们不妨总结一下: TS最核心的优势 : 静态类型检查+校验,代码并没有运行编译,就已经知道哪里有问题了,无论是变量查找还是类型错误...大型项目,可以上ts,还是要上ts,中小型项目,看工期,看你是否打算在时间允许情况下尝试使用ts。 技术本身没有好坏,长远看,弱类型语言并不是那么的友好。

    94320

    TypeScript 类型系统

    的错误。 实际上,这种错误并不是类型错误,而是找不到成员变量的错误。...lib.d.ts 的内容主要是一些变量声明(如:window、document、math)和一些类似的接口声明(如:Window、Document、Math)。...根据第一步给变量设定的类型进行类型检查,即不允许类型不兼容的赋值, 不允许使用值空间和类型空间不存在的变量和类型等。 第一个点是通过类型注解的语法来完成。...接下来,我们介绍类型系统的功能,即它能为我们带来什么。如果上面的内容你已经懂了,那么接下来的内容会让你感到”你也不过如此嘛“。 类型系统的主要功能 定义类型以及其上的属性和方法。...比如定义 String 类型, 以及其原型上的方法和属性。 ?

    1.7K10

    TypeScript语言特性(上)

    在某种程度上,any的对立面就是void,即所有的类型都不存在的时候。...(x.splice(3, 1)); // 错误,'string'上不存在'splice'方法 } // x 依然是 any 类型 x.foo(); // 合法 在这段代码中,我们首先声明了一个any类型的变量...; // 错误 如果你尝试调用customConsole对象上的log方法,TypeScript会告诉我们customConsole对象未被声明: // Cannot find name 'customConsole...但是,有时候我们希望调用一个未被定义的对象上的方法,比如window对象上的console方法。 console.log("Log Entry!")...; var host = window.location.hostname; 当访问 DOM 或 BOM 对象时,我们没有遇到错误,是因为这些对象已经在一个特殊的 TypeScript 文件(被称为声明文件

    1.3K20

    攀爬TS之路(一) 原始数据类型、任意值类型

    实际上,也算是必备知识了,印象最深的就是Element-Plus的示例代码都是TS了。 简介 TypeScript是JavaScript的超集(添加了类型系统),适用于任何规模的项目。...TypeScript是静态类型 静态类型:在编译阶段就能确定变量的类型,能在编译阶段暴露大部分的错误 动态类型:在运行时才会确定变量的类型,会导致更多错误(如类型匹配错误) TS是静态类型。...TS let num = 1 num.split('') // 类型“number”上不存在属性“split”。 上面这段代码在编译阶段就会报错,能够提前知道问题所在。.../ 类型“number”上不存在属性“split”。...图片 允许在任意值上访问任何属性(有错误也是运行时才会报错) let myNumber: any = 1 console.log(myNumber.a) // undefined console.log

    97930

    TypeScript手记(六)

    类型推断 这节介绍 TypeScript 里的类型推断。即,类型是在哪里如何被推断的。 基础 TypeScript 里,在有些没有明确指出类型的地方,类型推断会帮助提供类型。...比如: window.onmousedown = function(mouseEvent) { console.log(mouseEvent.clickTime) // Error } 这个例子会得到一个类型错误...,TypeScript 类型检查器使用 window.onmousedown 函数的类型来推断右边函数表达式的类型。...因此,就能推断出 mouseEvent 参数的类型了,所以 mouseEvent 访问了一个不存在的属性,就报错了。 如果上下文类型表达式包含了明确的类型信息,上下文的类型被忽略。...这也意味着,你阻止不了将它们赋值给其它类型,就算是你想要阻止这种情况也不行。null的发明者,Tony Hoare,称它为价值亿万美金的错误。

    1.4K10

    【TypeScript 演化史 — 第九章】object 类型 和 字符串索引签名类型的点属性

    当咱们试图访问此类对象上的任意属性时,TypeScript 会提示编译时错误 // Type {} const obj = {}; // Error: 类型“{}”上不存在属性“prop” obj.prop...= "value"; 但是,仍然可以使用在 Object 类型上定义的所有属性和方法,这些属性和方法通过JS 的原型链调用: // Type {} const obj = {}; // "[object...在类型使用上使用.符号访问未知属性仍然是一个错误,因此,对于以下代码,TypeScript 2.2 仍然会给出一个编译时错误: const portNumbers = {}; // OK portNumbers...没有为这段代码提供一个错误,那么就没有对拼写错误的属性名的保护。...给定适当的字符串索引签名,在这些情况下,就会获得更少的类型错误,并且不再需要使用类型注释注释点属性访问,这只是为了让编译器通过。

    1.9K30
    领券