本章节要介绍的内容为 TS 接口当中的可选属性和索引签名,如果要想先了解可选属性和索引签名之前首先要来介绍一下接口的注意点,接口的注意点就是如果你使用了接口类型来限定了函数的入参,限定了某个变量,这个时候你调用函数或者使用变量的时候就必须和接口里面的限定一模一样,例如之前我们接口当中有 firstName
与 lastName
那么你调用函数给入参的时候入参的参数当中就必须包含该两个参数,那么如何来验证一下我所说的这一点内容呢,其实很简单,直接上代码即可如下代码是正常情况下的代码:
interface FullName {
firstName: string
lastName: string
}
function say({firstName, lastName}: FullName): void {
console.log(`我的姓名是: ${firstName}_${lastName}`);
}
say({firstName: "BN", lastName: "Tang"});
lastName
不给了,来看看会发生什么情况:lastName
给加上并且还多给一个 middleName
来看看是不是如上所说的 只能是接口当中限定的一模一样
:如果使用接口来限定了变量或者形参, 那么在给变量或者形参赋值的时候, 赋予的值就必须和接口限定的一模一样才可以, 多一个或者少一个都不行
好了经过了介绍了如上的注意点了之后就可以来看本章节的内容了,但是有时在企业开发中可以多一个也有可能少一个,那么少一个或少多个怎么做,那么这个时候就可以利用 可选属性
来进行完成了,首先来提一个需求来引出该示例,改造一下接口的限定内容,添加一个 middleName
, 如果在调用函数时传入的形参当中有 middleName
我就输出接口当中完整的内容,否则就输出 firstName
,和 lastName
,改造之后的代码如下:
interface FullName {
firstName: string
lastName: string
middleName: string
}
function say({firstName, lastName, middleName}: FullName): void {
if (middleName) {
console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
return;
}
console.log(`我的姓名是:${firstName}_${lastName}`);
}
say({firstName: "BN", lastName: "Tang", middleName: "666"});
middleName
不传在看看:?
即可:?
即可如下:interface FullName {
firstName: string
lastName?: string
middleName?: string
}
function say({firstName, lastName, middleName}: FullName): void {
if (middleName) {
console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
return;
}
console.log(`我的姓名是:${firstName}_${lastName}`);
}
say({firstName: "BN"});
interface FullName {
firstName: string
lastName: string
middleName: string
}
function say({firstName, lastName, middleName}: FullName): void {
if (middleName) {
console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
return;
}
console.log(`我的姓名是:${firstName}_${lastName}`);
}
say({firstName: "BN", lastName: "Tang", middleName: "666", abc: "123"} as FullName);
interface FullName {
firstName: string
lastName: string
middleName: string
}
function say({firstName, lastName, middleName}: FullName): void {
if (middleName) {
console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
return;
}
console.log(`我的姓名是:${firstName}_${lastName}`);
}
say({firstName: "BN", lastName: "Tang", middleName: "666", abc: "123", 123: 123} as FullName);
变量
interface FullName {
firstName: string
lastName: string
middleName: string
}
function say({firstName, lastName, middleName}: FullName): void {
if (middleName) {
console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
return;
}
console.log(`我的姓名是:${firstName}_${lastName}`);
}
let obj = {firstName: "BN", lastName: "Tang", middleName: "666", abc: "123", 123: 123};
say(obj);
索引签名
interface FullName {
firstName: string
lastName: string
middleName: string,
[propName: string]: any
}
function say({firstName, lastName, middleName}: FullName): void {
if (middleName) {
console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
return;
}
console.log(`我的姓名是:${firstName}_${lastName}`);
}
say({firstName: "BN", lastName: "Tang", middleName: "666", abc: "123", 123: 123, def: "def"});
本期结束咱们下次再见👋~
🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有