TypeScript 额外的属性检测

博客介绍了TypeScript中对象字面量在赋值或传参时会进行“额外属性检查”,若存在“目标类型”不包含的属性会报错。同时给出官网提供的三种解决方法,包括使用类型断言、添加字符串索引签名、将字面量赋值给另外一个变量。

先来看个例子:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值