1

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

考虑:

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

我怎么能断言它OneTypeOfObject有一个类型OneType并且AndAnother有一个类型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”。

4

1 回答 1

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');

于 2015-07-16T15:53:19.230 回答