【发布时间】:2018-03-12 08:21:16
【问题描述】:
TL;DR 我想为已编译的 PureScript 模块创建 TypeScript 类型,并将它们分发到我的 npm 包中。我很乐意手动维护这些类型,我只是不知道我需要在 tsconfig.json(上游和下游)和 package.json 中添加什么。
我有一个project,其核心功能是在 PureScript 中使用 TypeScript CLI 实现的,所有这些最终都通过 npm 作为 JavaScript 分发。我创建了一个布局更简单的similar project:
.
├── cli # TypeScript CLI project
│ ├── main.ts
│ └── tsconfig.json
│
├── output # Compiled PureScript modules
│ └── People
│ ├── externs.json
│ └── index.js
│
├── src # PureScript source
│ └── People.purs
│
└── types # TypeScript types for PureScript modules
└── People.d.ts
在src/People.purs我定义了核心功能:
module People where
type Person = { name :: String }
david :: Person
david = { name: "David "}
在types/People.d.ts 中,我为 PureScript 模块定义了 TypeScript 类型,以便我可以安全地从 TypeScript 中使用它们:
declare module "People" {
export interface Person {
name: string;
}
export const david: Person;
}
最后,在cli/main.ts 中,我想用我定义的 TypeScript 类型导入已编译的 PureScript 模块:
import * as People from "People";
console.log(People.david);
我可以构建它,但是当我尝试运行终极 JavaScript (node cli/main.js) 时,tsc 生成的 require 调用失败,因为它们不使用绝对路径--require("People") 应该在这种情况下是require("./People")。将 TypeScript 中的 import 语句设为 relative 会解除类型的关联。
我很难实现这些目标:
- 维护从 TypeScript 导入的所有 PureScript 模块的 TypeScript 类型。
- 确保 TypeScript 类型检查。
- 确保对 PureScript 模块的
require调用在运行时解析。 - 使用 npm 包分发 TypeScript 类型,以便 TypeScript 消费者也可以使用这些类型。
如果您有需要来自 TypeScript 的 PureScript 模块并通过 npm 分发所有这些模块的经验,我非常感谢您的指导!
【问题讨论】:
标签: node.js typescript npm purescript