What is the difference between using the colon and as syntax for declaring type?

前端 未结 2 1104
清酒与你
清酒与你 2020-12-19 06:26

What is the difference between the : syntax for declaring type

let serverMessage: UServerMessage = message;

and the as

2条回答
  •  被撕碎了的回忆
    2020-12-19 06:50

    One is a type annotation one is a type assertion.

    The type annotation tells the compiler check that the assignment is fully valid and that message is indeed compatible with UServerMessage

    The type assertion tells the compiler, I know what I'm doing, message is a UServerMessage, never mind what you think you know, I have more information and I know best. Some checks are still performed even if you use type assertions so you might see double assertions message as any as UServerMessage for example if the type of message is very incompatible with UServerMessage

    You should always prefer a type annotation to an assertion. Use assertion with care and only if you have to. A type assertion is a hammer to get a square peg to fit into a round hole, useful at times but you might take a second look at what you are doing to make sure its right. Make sure it's not:

提交回复
热议问题