TypeScript 变量声明

发布于 2023-07-22 12:40:27 字数 1256 浏览 34 评论 0

1. 解构

要尽小心使用解构,当存在深层嵌套,加上重命名 ,默认值和类型注解时,将会变得难以理解

作用于函数参数

// 即类型是写在后面的, [number,number]
const input = [1,2]
function f([first,second]: [number,number]) {
    console.log(first)
    console.log(second)
}
f(input)

// 函数参数类型 {a:number}
const input = {a:1}
function f({a} : {a:number}) {
    console.log(a)
}
f(input)

2. 属性重命名

const o = {
    a: 1,
    b:'2'
}

const {a, b} = o;

// 属性重命名
const {a:c, b:d} = o;

即此时冒号后面的 c 和 d 是属性重命名,而不是指明类型,如果想指明类型:

const {a:c, b:d}:{a:number, b:string} = o;

3. 默认值

// 此时 {a:number, b: 'string'} 为类型声明,并不是解构
function keep(obj: {a:number, b: 'string'}) {
    const {a, b} = obj;

}

keep({a:1,b:'2'})

4. 展开

const default = {a:1,b:2}

const new = {...default, a:3}  // {a:3,b:2}

但是,对象展开只包含对象的自身可枚举属性,因此当展开对象实例时,会丢失方法:

class C {
    p = 1;
    m() {

    }
}

等同于

class C {
    constructor(){
        this.p = 1;
    }
    m() {

    }
}

// {p:1}, 因此此时 m 属性位于 C.proptype 上,不能展开得到
const c = {... new C()}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
328 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文