【问题标题】:Typecasting in TypeScriptTypeScript 中的类型转换
【发布时间】:2017-12-28 02:45:36
【问题描述】:

我有以下 TypeScript 代码来创建 ApolloClient:

return new ApolloClient({
    dataIdFromObject: (o) => o.uuid
});

编译器给我以下错误:

TS2339:“对象”类型上不存在属性“uuid”

我尝试按如下方式进行类型转换:

interface DomainObject {
    uuid: string
}
...
return new ApolloClient({
    dataIdFromObject: (<DomainObject>o) => o.uuid
});

但是现在编译器变得非常混乱,代码周围的几行代码开始出现错误。具体来说,上面的转换给出了这个错误:

TS17008:JSX 元素''没有对应的结束标签

显然它认为这是 JSX 代码。

我该如何解决这个问题?

提前致谢。

【问题讨论】:

  • o 这里是参数声明,不是表达式。试试(o: DomainObject) =&gt; o.uuid
  • @BenjaminHodgson,感谢您的澄清。奇迹般有效!如果您可以将其作为答案,我会将其标记为正确。

标签: typescript apollo-client


【解决方案1】:

类型断言仅对表达式有效。 o 这里是参数声明,而不是表达式(o =&gt; o.uuid 是 lambda)。但是你可以给参数一个类型注解

return new ApolloClient({
    dataIdFromObject: (o: DomainObject) => o.uuid
});

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2017-07-28
    相关资源
    最近更新 更多