TypeScript中的类型转换

TypeScript中的类型转换,typescript,apollo-client,Typescript,Apollo Client,我有以下TypeScript代码来创建Apollo客户端: return new ApolloClient({ dataIdFromObject: (o) => o.uuid }); 编译器给了我以下错误: TS2339:类型“Object”上不存在属性“uuid” 我试着按如下方式打字: interface DomainObject { uuid: string } ... return new ApolloClient({ dataIdFromObject:

我有以下TypeScript代码来创建Apollo客户端:

return new ApolloClient({
    dataIdFromObject: (o) => o.uuid
});
编译器给了我以下错误:

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

我试着按如下方式打字:

interface DomainObject {
    uuid: string
}
...
return new ApolloClient({
    dataIdFromObject: (<DomainObject>o) => o.uuid
});
接口域对象{
uuid:string
}
...
返回新客户端({
dataIdFromObject:(o)=>o.uuid
});
但是现在编译器变得非常混乱,代码周围的几行代码(以前没有问题)开始出现错误。具体而言,上面的强制转换会产生以下错误:

TS17008:JSX元素“”没有相应的结束标记

显然,它认为这是JSX代码

我怎样才能解决这个问题


提前感谢。

类型断言仅对表达式有效
o
这里是参数声明,不是表达式(
o=>o.uuid
是lambda)。但您可以为参数提供类型注释:

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

类型断言仅对表达式有效
o
这里是参数声明,不是表达式(
o=>o.uuid
是lambda)。但您可以为参数提供类型注释:

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

o
这里是参数声明,不是表达式。请尝试
(o:DomainObject)=>o.uuid
@BenjaminHodgson,感谢您的澄清。工作起来很有魅力!如果你能把它作为一个答案,我会把它标记为正确的。
o
这里是一个参数声明,而不是一个表达式。请尝试
(o:DomainObject)=>o.uuid
@BenjaminHodgson,感谢您的澄清。工作起来很有魅力!如果你能把它作为一个答案,我会认为它是正确的。