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

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

总之,使用类型断言时一定要格外小心,尽量避免断言后调用方法或引用深层属性,以减少不必要的运行时错误。...当我们引用一个在此类型上不存在的属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,数字类型的变量 foo 上是没有 length 属性的,故 TypeScript 给出了相应的错误提示。 这种错误提示显然是非常有用的。...上面的例子中,我们需要将 window 上添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 上不存在 foo 属性。...需要注意的是,将一个变量断言为 any 可以说是解决 TypeScript 中类型问题的最后一个手段。 它极有可能掩盖了真正的类型错误,所以如果不是非常确定,就不要使用 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 属性。...需要注意的是,将一个变量断言为 any 可以说是解决 TypeScript 中类型问题的最后一个手段。 它极有可能掩盖了真正的类型错误,所以如果不是非常确定,就不要使用 as any。

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

    旧项目TypeScript改造问题与解决方案记

    '{}'. // 编辑器报错:[ts] 类型“{}”上不存在属性“b”。...这是因为TypeScript不允许增加没有声明的属性。 因此,我们有两个办法来解决这个报错: 在对象中增加属性定义(推荐)。具体方式为:let a = {b: void 0};。...给`a`对象增加any属性(应急)。具体方式为:`let a: any = {};`。这个方法能够让TypeScript类型检查时忽略这个对象,从而编译通过不报错。...### Window对象属性赋值报错 与上一个情况类似,我们给一个对象中赋值一个不存在的属性,会出现编辑器和编译报错: window.a = 1; // 终端编译报错:TS2339: Property...编辑器报错:[ts] 类型“ObjectConstructor”上不存在属性“assign”。

    5.7K10

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

    当strict设置为true时,你就会对TypeScript说“不要在我的代码中产生歧义”。 出于这个原因,我建议对TypeScript保持最大程度的严格,即使在一开始修复所有错误会比较困难。...从现在开始,我将以文本形式向你展示错误,但请记住,ide和文本编辑器会在你在TypeScript中出现错误时显示这些红线。...url"属性不存在类型字符串TypeScript。...例如,现在arrOfLinks与正确的类型(Link的数组)相关联,编辑器可以推断数组中的每个对象都有一个名为url的属性,就像Link接口中定义的那样: 现在告诉我这不是很棒,因为它确实很棒。...很酷,IPerson没有任何名为printDetails的属性,但更重要的是它应该是一个函数。幸运的是,TypeScript接口也可以描述函数。

    7.3K40

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

    具有冗长、可选的错误解释。可能是最好的 Elm 以开发人员为中心的冗长错误消息。建议使用现有方法来解决拼写错误。错误消息还包含一个提示,以了解/减轻错误情况。 开发人员效率 开发人员效率有许多因素。...调用不存在的方法或函数 我们首先调用一个不存在的方法或函数。 Java 有一个简单明了的错误消息,尽管 cannot find symbol 消息不太清楚(为什么你丢失了符号?)...我们还得到了一个错误编号 TS2339。遗憾的是,在 Google 上搜索该编号没有找到更多信息。此外,Typescript 不会显示有问题的行或受影响的类型。...$ npx tsc typescript/Error1.ts typescript/Error1.ts(4,11): error TS2339: Property 'notThere' does not...但这部分是主观的,你的观点可能会有所不同。 结论 编译器错误存在巨大差异,我们的行业似乎还没有就编译器错误消息的重要性或风格达成共识。消息从神秘且误导性到包含详细解释的长篇大论。

    1.5K10

    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

    Vue 3.0前的 TypeScript 最佳入门实践

    在 Typescript中,你必须在函数中定义返回类型。像这样: ? 若没有返回值,则会报错: ? 我们可以将其返回值定义为 void: ? 此时将无法 return 4. Any ?...如果你访问长度将会报错,而有时候,我们确实需要在还不确定类型的时候就访问其中一个类型的属性或方法,此时需要断言才不会报错: function getLength(something: string |...) 和空属性路径: 为了解决导航时变量值为null时,页面运行时出错的问题。 The null hero's name is {{nullHero?....有些是只在某些条件下存在,或者根本不存在。 例如给函数传入的参数对象中只有部分属性赋值了。带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个 ?符号。...$mount('#app'); 但仅仅这样,还不够。

    3.8K20

    【Vuejs】301- Vue 3.0前的 TypeScript 最佳入门实践

    在 Typescript中,你必须在函数中定义返回类型。像这样: ? 若没有返回值,则会报错: ? 我们可以将其返回值定义为 void: ? 此时将无法 return 4. Any ?...如果你访问长度将会报错,而有时候,我们确实需要在还不确定类型的时候就访问其中一个类型的属性或方法,此时需要断言才不会报错: function getLength(something: string |...) 和空属性路径: 为了解决导航时变量值为null时,页面运行时出错的问题。 The null hero's name is {{nullHero?....有些是只在某些条件下存在,或者根本不存在。 例如给函数传入的参数对象中只有部分属性赋值了。带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个 ?符号。...$mount('#app'); 但仅仅这样,还不够。

    4.8K52

    Vue 3.0前的 TypeScript 最佳入门实践

    在 Typescript中,你必须在函数中定义返回类型。像这样: ? 若没有返回值,则会报错: ? 我们可以将其返回值定义为 void: ? 此时将无法 return 4. Any ?...如果你访问长度将会报错,而有时候,我们确实需要在还不确定类型的时候就访问其中一个类型的属性或方法,此时需要断言才不会报错: function getLength(something: string |...) 和空属性路径: 为了解决导航时变量值为null时,页面运行时出错的问题。 The null hero's name is {{nullHero?....有些是只在某些条件下存在,或者根本不存在。 例如给函数传入的参数对象中只有部分属性赋值了。带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个 ?符号。...$mount('#app'); 但仅仅这样,还不够。

    2.8K20

    Vue 3.0前的 TypeScript 最佳入门实践

    在 Typescript中,你必须在函数中定义返回类型。像这样: ? 若没有返回值,则会报错: ? 我们可以将其返回值定义为 void: ? 此时将无法 return 4. Any ?...如果你访问长度将会报错,而有时候,我们确实需要在还不确定类型的时候就访问其中一个类型的属性或方法,此时需要断言才不会报错: function getLength(something: string |...) 和空属性路径: 为了解决导航时变量值为null时,页面运行时出错的问题。 The null hero's name is {{nullHero?....有些是只在某些条件下存在,或者根本不存在。 例如给函数传入的参数对象中只有部分属性赋值了。带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个 ?符号。...$mount('#app'); 但仅仅这样,还不够。

    3K31

    TypeScript 官方手册翻译计划【三】:类型收缩

    因为我也是 TypeScript 的初学者,所以无法保证翻译百分之百准确,若有错误,欢迎评论区指出; 翻译内容:暂定翻译内容为 TypeScript Handbook,后续有空会补充翻译文档的其它部分;...除了我们添加的类型注解之外,这些 TypeScript 代码看起来确实很像 JavaScript。...那么结果为 true 的分支会将 x 收缩为具有可选属性或必需属性 value 的类型,而结果为 false 的分支则会将 x 收缩为具有可选属性或缺失属性 value 的类型。...之前,当 radius 是可选属性的时候,我们看到了一个报错(仅在启用 strictNullChecks 的情况下),因为 TypeScript 无从得知这个属性是否真的存在。...两种解释都是合理的,但只有后者会在禁用 strictNullChecks 的情况下仍然抛出一个错误。 那么,如果这时候我们再次检查 kind 属性会怎么样呢?

    2.4K20
    领券