为什么TypeScript不将数字转换为类型属性中的字符串?

时间:2019-06-13 21:26:05

标签: typescript

我今天遇到一个错误,导致我四处挖掘和困惑。都是由于我的假设,当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'!!!!

Playground link

在查看生成的JavaScript时,似乎应该发生这种情况,但是我认为TypeScript会更健壮,并且此功能是设计使然。

TypeScript为什么不将我的数字类型转换为字符串?

1 个答案:

答案 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