【问题标题】:TypeScript: multiple destructuring and type assertionTypeScript:多重解构和类型断言
【发布时间】:2015-07-17 16:12:21
【问题描述】:

我想知道在 TypeScript 中使用解构时如何断言多个变量的类型。

考虑:

const { OneTypeOfObject, AndAnother } = ProtoBuf.loadProtoFile('./ohYesProtobufs.proto').build('iAmANameSpace');

如何断言OneTypeOfObject 的类型为OneTypeAndAnother 的类型为OtherType

我可以让它们全部 any 像这样:

const { OneTypeOfObject, AndAnother } = <any>ProtoBuf.loadProtoFile('./ohYesProtobufs.proto').build('iAmANameSpace');

我真正想做的是这样的:

const { <OneType>OneTypeOfObject, <OtherType>AndAnother } = ProtoBuf.loadProtoFile('./ohYesProtobufs.proto').build('iAmANameSpace');

显然有人考虑过这种事情:

https://github.com/Microsoft/TypeScript/commit/7a74d9f8d021f50201765d2170af8d249af90320

但根据我所看到的,我找不到答案......

更新

我尝试了大卫的两种方法,但都没有奏效。这是用于方法 2 的代码:

interface OneType extends ProtoBuf.ProtoBuf {
  new(): any;
}

interface OtherType extends ProtoBuf.ProtoBuf {
  new(): any;
}

const { <OneType>OneTypeOfObject, <OtherType>AndAnother } = ProtoBuf.loadProtoFile('./ohYesProtobufs.proto').build('iAmANameSpace');

它导致了这个错误:

类型 'ProtoBuf' 不可分配给类型 '{ OneTypeOfObject: OneType; AndAnother:其他类型; }'。 “ProtoBuf”类型中缺少属性“OneTypeOfObject”。

【问题讨论】:

    标签: typescript destructuring


    【解决方案1】:

    一开始我也对使用类型进行解构感到困惑。有一些方法可以做到这一点。

    最简单的方法是让ProtoBuf.loadProtoFile('./ohYesProtobufs.proto') 返回适当的类型(我意识到这并不总是可行或容易的)。

    const { OneTypeOfObject, AndAnother } = <{ OneTypeOfObject: TypeA; AndAnother : TypeB }> ProtoBuf.loadProtoFile('./ohYesProtobufs.proto');

    const { OneTypeOfObject, AndAnother } : { OneTypeOfObject: TypeA; AndAnother : TypeB } = ProtoBuf.loadProtoFile('./ohYesProtobufs.proto');

    【讨论】:

    • 实际上这不起作用大卫 - 我会更新我的问题以澄清。
    • 这个例子很难说,因为它存在。 ProtoBuf.loadProtoFile('./ohYesProtobufs.proto').build('iAmANameSpace') 是否返回一个对象,这两个值都是您要查找的值?
    • 确实如此 - 但这不是 protobufjs 定义的一部分。
    猜你喜欢
    • 2018-03-08
    • 2020-10-30
    • 2019-08-21
    • 2021-12-29
    • 2020-03-13
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多