我这样说有什么区别吗?
interface/class MyRecord { ... } const record: MyRecord = { ... }
对比
const record: MyRecord = JSON.parse('{...}') as MyRecord?
nhaq1z211#
在第一个示例中,TypeScript将检查对象文本是否符合指定的类型,如果出现错误,则会出错。在第二个示例中,JSON直到运行时才被解析。as语句允许您Assert结果将为该类型,但TypeScript无法帮助您确保正确性。JSON还限制了JSON支持的数据类型。生成一个字符串,然后将其传递给JSON解析器,可能比只使用对象文字效率更低。
as
ktecyv1j2#
是的,第二种方法的类型安全级别与第一种方法不同。在第一种方法中,如果对象文字与接口或类定义的形状不匹配,则会出现TypeScript错误。相反,通过使用as关键字,您“假装”它是相同的类型,因此TypeScript不会检查形状匹配。
2条答案
按热度按时间nhaq1z211#
在第一个示例中,TypeScript将检查对象文本是否符合指定的类型,如果出现错误,则会出错。在第二个示例中,JSON直到运行时才被解析。
as
语句允许您Assert结果将为该类型,但TypeScript无法帮助您确保正确性。JSON还限制了JSON支持的数据类型。
生成一个字符串,然后将其传递给JSON解析器,可能比只使用对象文字效率更低。
ktecyv1j2#
是的,第二种方法的类型安全级别与第一种方法不同。在第一种方法中,如果对象文字与接口或类定义的形状不匹配,则会出现TypeScript错误。相反,通过使用
as
关键字,您“假装”它是相同的类型,因此TypeScript不会检查形状匹配。