C# 和 typescript 之间 JSON 的端到端类型安全
Posted
技术标签:
【中文标题】C# 和 typescript 之间 JSON 的端到端类型安全【英文标题】:End to end type safety of JSON between C# and typescript 【发布时间】:2016-07-09 07:56:46 【问题描述】:Typescript 和 C# 都支持对“编译”类型检查的对象成员的类型安全访问,而 json 用于在 Web 应用程序后端和它们的前端之间传输“数据传输对象”。
我希望这里的工具可以从定义 JSON 消息的 C# 类生成打字稿“包装器类”——但我从未听说过使用这种工具。 可能是因为我不是一个活跃的 TypeScript 开发人员,所以我错过了 TypeScript 工具集中的一些东西,或者 .net 的“标准”JSON 工具包之一已经做到了。或者我可能只是在问一个非常愚蠢的问题……..
【问题讨论】:
【参考方案1】:TypeLITE 会将 C# 类转换为 TypeScript 接口:
public class Address
public string Street get; set;
public class Person
public string Name get; set;
public List<address> Addresses get; set;
变成:
interface Address
Street: string;
interface Person
Name: string;
Addresses: Address[];
这将使您的 TypeScript 在使用 C# API 时保持诚实。
【讨论】:
谢谢,您知道一种生成 TypeScript“端点”的方法吗?它完全定义了 C# 应对公开的“JSON API”? (以及一个很好的开发/构建“管道”来使用它。) 我对此有疑问。一旦那个打字稿被编译成 javascript,你怎么能强制它是安全的?我正在编写一个 Angular2 应用程序,并且能够让 C# api 以与我在 Typescript 中使用的接口不同的形式返回数据,并且我没有收到任何类型的错误 @AlexKibler - TypeScript 提供编译时检查,而不是运行时检查(尽管有添加运行时检查的衍生工具,例如 TS*:stevefenton.co.uk/2014/07/…) @IanRingrose 我没有完整的故事给你 - 有很多选择,这取决于你目前的工作流程。从那里大量的任务运行者来看,几乎所有人都可以自动执行此操作。【参考方案2】:Reinforced.Typing 看起来像是一个选项,它似乎生成 TypeScript 代码来调用 web 服务以及接口/对象来描述返回的数据。
简单地说,这个东西将你的 .NET 程序集转换为 TypeScript 代码。 它集成到 VisualStudio 构建过程中。
我认为它的使用比 TypeLITE 少,两者都是开源的,因此可以扩展以满足给定项目的需求。
【讨论】:
【参考方案3】:查看Reinforced.Typings,尤其是this sample。那里展示了如何将您的 MVC 应用程序控制器转换为 AngularJS 服务,返回您的模型的 ng.IPromise<>
,并确保构建时的类型安全。
【讨论】:
以上是关于C# 和 typescript 之间 JSON 的端到端类型安全的主要内容,如果未能解决你的问题,请参考以下文章