Как правильно увеличить экспресс-типы? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть файл: types/express.d.ts

declare namespace Express {
  export interface Response {
    respondWith(data: any): Response;
  }
}

и это в app.js

Express.response.respondWith = function(data) {
  return this.json({
    errors: null,
    data: data
  });
};

Как я могу правильно объединить эти два файла в одно «увеличение»?

Я попытался скопировать это почти идентично .Но это не похоже на работу.

Вот попытка кодов и ящиков для увеличения

1 Ответ

0 голосов
/ 20 апреля 2019

Я просто изучаю TypeScript сам, поэтому, возможно, в этом ответе есть место для улучшения, но вот он:

Я думаю, что вам нужно сделать увеличение с express-serve-static-core, а не express(по крайней мере, я не мог заставить его работать).

Другое дело, что я не знаю другого способа увеличения express, кроме экспорта его обратно из express-formater.Согласно TypeScript handbook , express-formater является модульным плагином, поэтому я искал moment-range подходящий шаблон для использования здесь, но безуспешно.

Соответствующий код:

express-formater.ts

import core from "express-serve-static-core";
import express from "express";

declare module "express-serve-static-core" {
  export interface Response {
    respondWith: (p1: any) => Response;
  }
}

express.response.respondWith = function(data: string) {
  return this.json({
    error: null,
    data: data
  });
};

export default express;

Основные index.ts:

import express from "./express-formater";

const app = express();
const port = 8080;

app.get("/", (req, res) => res.respondWith({ ok: true }) );

app.listen(port, () =>
  console.log(`Typescript app listening on port ${port}!`)
);

Обновленные коды и box .tsconfig.json нужно "esModuleInterop": true.

ОБНОВЛЕНИЕ

Просто еще раз проверили, что нет необходимости экспортировать express обратно из express-formater.Просто как напоминание для себя, улучшенный подход:

express-formater.ts

import core from "express-serve-static-core";
import express from "express";

declare module "express-serve-static-core" {
  export interface Response {
    respondWith: (p1: any) => Response;
  }
}

express.response.respondWith = function(data: string) {
  return this.json({
    error: null,
    data: data
  });
};

Основной index.ts:

import express from "express"
import "./express-formater";

const app = express();
const port = 8080;

app.get("/", (req, res) => res.respondWith({ ok: true }) );

app.listen(port, () =>
  console.log(`Typescript app listening on port ${port}!`)
);

Обновлен codesandbox .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...