我今天遇到一个错误,导致我四处挖掘和困惑。都是由于我的假设,当TypeScript类中的属性定义为string
时,TypeScript会抛出错误或将另一种类型转换为string
表示形式。
我希望以下内容在类构造中引发错误,或者将参数转换为字符串。
class A {
constructor(public str: string) {
console.log(typeof (str));
console.log(typeof (this.str));
}
t() {
return typeof (this.str);
}
}
const a: A = new A(5 as any);
const t = a.t();
// t is now 'number'!!!!
在查看生成的JavaScript时,似乎应该发生这种情况,但是我认为TypeScript会更健壮,并且此功能是设计使然。
TypeScript为什么不将我的数字类型转换为字符串?
答案 0 :(得分:0)
使用//clients code
public static Socket socket;
public static IPEndPoint endPoint;
public void InitServerInfo() {
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
endPoint = new IPEndPoint(IPAddress.Parse("25.79.15.13"), 11060); //ip + port of the server
}
public void SendToServer(byte[] bytes) {
socket.SendTo(bytes, endPoint);
}
铸造变量应该被认为是危险的。这是一个类型声明-您正在告诉Typescript编译器,您比它更了解对象的类型。如果您使用Typescript编译器说谎,那么它就无法帮助您确保程序安全。
更糟的是,您在此处使用as
类型,这是一种非常宽松的类型。如果强制转换为其他任何类型,包括any
,则可能会出现编译器错误。但是any
can be assigned to any type without error。