:
声明类型的语法之间有什么区别
let serverMessage: UServerMessage = message;
和as
语法
let serverMessage = message as UServerMessage;
在本示例中,它们似乎至少产生相同的结果
答案 0 :(得分:8)
一个是类型注释,一个是类型声明。
类型注释告诉编译器检查分配是否完全有效,并且message
确实与UServerMessage
兼容
类型断言告诉编译器,我知道我在做什么,message
是UServerMessage
,不用管你认为你知道什么,我有更多信息,而且我知道最好。即使使用类型断言,仍会执行某些检查,因此,例如,如果message as any as UServerMessage
的类型与message
UServerMessage
。
与断言相比,您应该始终偏爱类型注释。仅在必要时谨慎使用断言。类型断言是一种锤子,用于将一个方钉固定到一个圆孔中,这有时会很有用,但您可能需要重新审视自己在做什么以确保其正确。确保不是:
答案 1 :(得分:2)
是的他们不同
首先,让我们看一下这个示例
let a: string;
let b: number;
function c() {
const d = (a || b) as number; // Works
const e: number = (a || b); // Throw typing error
}
所以as number
告诉Typescript在这种情况下,值将是一个数字( 定义结果的类型 )。它迫使Typescript认为它将始终返回一个数字(即使可能不是真的 )。
``:数字``` 定义变量的类型 ,而不是结果。因此,Typescript将验证并确保不会再有其他情况(即使永远不会发生, )。
希望有帮助。