博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TypeScript 额外的属性检测
阅读量:6164 次
发布时间:2019-06-21

本文共 857 字,大约阅读时间需要 2 分钟。

先来看个例子:

interface Config {    width?: number;}function  CalculateAreas (config: Config): { area: number} {    let square = 100;    if (config.width) {        square = config.width * config.width;    }    return square;}let mySquare = CalculateAreas({ widdth: 5 });复制代码

我们传入的参数是widdth,并不是width

此时TypeScript会认为这段代码可能存在问题。对象字面量当被赋值给变量或作为参数传递的时候,会被特殊对待而且经过“额外属性检查”。

如果一个对象字面量存在任何“目标类型”不包含的属性时,你会得到一个错误。

// error: 'widdth' not expected in type 'Config'let mySquare = CalculateAreas({ widdth: 5 });复制代码

解决方法,官网上给了三种方式:

第一种使用类型断言:

let mySquare = CalculateAreas({ widdth: 5 } as Config);复制代码

第二种添加字符串索引签名:

interface Config {   width?: number;   [propName: string]: any;}复制代码

这样Config可以有任意数量的属性,并且只要不是width,那么就无所谓他们的类型是什么了。

第三种将字面量赋值给另外一个变量:

let options = { widdth: 5 };let mySquare = CalculateAreas(options);复制代码

转载于:https://juejin.im/post/5d09efbde51d45108126d24b

你可能感兴趣的文章
VCL组件之重要的公用属性
查看>>
异常球称重问题
查看>>
java 十六进制数的转换
查看>>
Divide and conquer method
查看>>
[sharepoint]根据用户名获取该用户的权限
查看>>
多线程模拟实现生产者/消费者模型 (借鉴)
查看>>
iOS开发需要哪些图片?
查看>>
命令行远程链接MySQL
查看>>
logstash向elasticsearch写入数据,如何指定多个数据template
查看>>
Node.js:Web模块、文件系统
查看>>
【转】灵活运用 SQL SERVER FOR XML PATH
查看>>
WCF角色服务
查看>>
常用sql001_partition by 以及 row_number()和 dense_rank()和rank()区别
查看>>
已开源|码上用它开始Flutter混合开发——FlutterBoost
查看>>
原地踏步 – 没有突破高效理念的结果
查看>>
“间谍”软件克星Ad-Aware
查看>>
终端服务器超出了最大允许连接数
查看>>
ansible软件模块参数
查看>>
vue-amap - 基于Vue2.0和高德地图的地图组件
查看>>
Windows Tips
查看>>