Typescript 箭头函数中的对象字面参数声明如何工作?

问题描述 投票:0回答:1

我在应用程序中经常遇到以下 Typescript 习惯用法。

interface something {
    comment: string;
}

const f = <something>({ data: result }) => result.comment;

console.log(f({ data: { comment: "Hi Mom"} }));

它会按预期在控制台上生成“Hi Mom”。

我有两个基本问题:

  • 实际上,这似乎是在说,“取我传递给您的对象的数据字段的值,将其称为
    result
    并将其转换为
    something
    ”,但我不明白这是如何实现的做到了这一点。
    result
    如何在函数调用中正确绑定?
  • 其次,tslint 抱怨
    something
    是一个隐藏的名称。据我所知,这是一种类型转换,而且我根本不明白类型转换是如何定义名称的,更不用说隐藏的名称了。

有人可以启发我吗?

typescript arrow-functions object-literal
1个回答
1
投票

取我传递给你的对象的数据字段包含的值,称之为结果

是正确的,它被称为解构赋值

并将其投射为某种东西

显然,在这个例子中,这只是一个错误,它什么也没做。这些称为“泛型类型”。我只能说这个例子应该是这样的,所以它以正确的方式使用泛型: interface something { data: { comment: string; } } const f = <T extends something>({ data: result }: T) => result.comment; console.log(f({ data: { comment: "Hi Mom"} }));

tslint 抱怨有些东西是一个隐藏的名字

没错,因为
something

被定义为接口和泛型类型,所以 tslist 抱怨

    

© www.soinside.com 2019 - 2024. All rights reserved.