繁体   English   中英

前后端共享TS接口

Sharing TS interface between back-end and front-end

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

假设我有这个快速路由器文件:

import * as express from 'express';
const router = express.Router();

export const register = v => {
   router.get('/', makeGetFoo(v));
   router.put('/', makePutFoo(v));
}

const makeGetFoo = v => {

  interface Response extends ApiDocResponse {  // <--- i want to share this interface with front-end codebase
    success: true
  }

  return (req,res,next) => {

     res.json(<Response>{success:true});

  };

}

如您所见,我正在尝试创建一个 ApiDoc 系统。 但它在前端也很有用,因此前端 TypeScript 可以知道将从 API 服务器反序列化哪些类型。

我的问题是 - 如何将后端代码中的类型导入 Angular5 或 Angular6 代码库? 我知道这样做的唯一好方法是将 ApiDoc.Response 类型放在第三个 .d.ts 文件中,然后前端和后端都可以导入该文件。 当然,这样做的缺点是维护第三个文件,并将其与 API 路由文件正确匹配。

2 个回复

这样的事情是我唯一想到的,而不必使用第三个中间文件.d.ts文件:

import * as express from 'express';
import {RequestHandler} from 'express';

const router = express.Router();

export const register = (v: any) => {
  router.get('/', MakeGet.makeGetFoo(v));
  router.put('/', MakePut.makePutFoo(v));
};

interface ApiDoc {
  success: boolean
}

export namespace MakeGet{

  export interface Response extends ApiDoc {  // <--- i want to share this interface with front-end codebase
    success: true
  }

  export const makeGetFoo = (v: any): RequestHandler => {

    return (req, res, next) => {

      res.json(<Response>{success: true});

    };

  };

}


export namespace MakePut {

  export interface Response extends ApiDoc {  // <--- i want to share this interface with front-end codebase
    success: true
  }

  export const makePutFoo = (v:any): RequestHandler => {

    return (req,res,next) => {

      res.json(<Response>{success:true});

    };

  };
}

缺点是所有名称空间,因此必须命名太多。 但是,如果在此处放置路由和api-doc信息,但在其他地方放置控制器代码,则可以使这些路由器文件稀疏且干净。

因此,在另一个文件中(也许在您的前端代码中),您可以这样做:

import {MakeGet, MakePut} from './foo'

export interface Bar extends MakePut.Response{

}

迟到总比不到好...

typesafe-api是一个专为此任务设计的库。

typesafe-api 架构

首先你定义你的 API 规范,然后它可以立即用于构建 API 客户端和 Express 处理程序,甚至在完全类型安全的 TS 中甚至错误处理和请求标头。

目的是创建一个可以使用编译器维护的 API。

有大量文档示例项目可以帮助您入门。

完全公开......我是图书馆的创造者,希望你觉得它有用!

1 React前端服务器和PHP / Symfony后端服务器之间的共享会话

我有一个应用程序,包括一个运行React的前端服务器和一个运行PHP / Symfony的后端服务器。 前端的一部分是使用twig模板(主要用于更新内容的后台表单)开发的,由同一个后端服务器处理,部分使用React开发并驻留在独立的前端服务器中(公共部分)用户访问权限,具有更多功能)。 ...

3 连接前端和后端

购买了一个新的前端模板来建立电子商务商店。 想咨询如何连接API。 前端模板将所有产品信息存储在本地存储中。 仔细阅读,这不是一种安全的做法。 附上下面的代码,所以平台只是将所有数据传递到一个json文件中。 在想前端从后端和数据库中提取数据的结构是什么? 是否应该将所有信息解析为 1 个 jso ...

4 前端连接到后端

我熟悉各种编程语言,最好是Java。 我正在学习javascript,并且那里有大量资源。 但是我正在努力寻找有关如何连接到Java代码的资源,Java代码随后将返回结果。 例如,我可以编写Java程序以从数据库中提取数据并进行操作/聚合。 假设我要构建一个页面,该页面为用户提供了一 ...

5 ejs是前端还是后端?

新手问题:我正在学习MEAN堆栈,并使用EJS(嵌入式javascript)作为模板引擎。 它的网站上说它“用客户端模板清除你的JavaScript中的HTML”,但我觉得&lt;%=%&gt;和&lt;%%&gt;在后端编译并随后发送给客户端。 我不明白吗? ...

2014-06-23 16:59:58 2 1593   ejs
6 连接前端与后端

我正在服务器端使用 Flask 构建应用程序,我希望在客户端执行一些检查(检查密码要求等)。 到目前为止,我已经成功地构建了具有大部分所需功能的服务器。 我还编写了一个 JS 脚本来进行密码检查。 如何连接两端,例如在渲染“注册”模板时,JS检查通过后注册成功? 如果这是一个容易回答的问题,我深表歉 ...

7 前端和后端术语

在ASP.Net中设计Web应用程序时,我通常将项目分为两个部分, 后端 (管理部分)和前端 (访问者/ SEO部分)。 假设我的访问者可以登录网站,并会执行很多任务,例如填写个人资料,发送消息等。 该部分(经过身份验证的用户)在前端和后端之间找我一个不同的“层”,并且很难定义前端是否是 ...

9 前端到后端兼容性

我的公司想通过Google Play商店分发一个Android应用。 问题是我们的客户在这里托管自己的后端,而这些后端并不总是最新的。 因此,随着时间的流逝,我们分发了该应用程序的新版本,这将发生在客户没有支持新版本所需的后端的情况下,客户在那里更新了该应用程序。 我正在寻找有关如何解 ...

10 前端第一端还是后端?

嗨,我必须使用WebForms在MS ASP.NET中执行一个小型CMS应用程序。 我自己做所有事情:前端和后端以及数据库架构。 既然我想开发这个网站,我想知道我是应该从前端开始还是从后端开始。 考虑到这是一个小项目,你们可以给我一个我最好做的步骤列表,以帮助确定开发我的应用程序的 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM