【问题标题】:What is the story for creating and consuming TypeScript libraries?创建和使用 TypeScript 库的故事是什么?
【发布时间】:2016-08-23 01:15:34
【问题描述】:

我一直在到处使用 TypeScript 来开发 Web 应用程序,并引用了通过 Definitely Typed 提供的公共类型定义,但我一直无法理解的一件事是如何在 TypeScript 中创建可重用的库,目的是被 TypeScript 应用程序或其他库使用。

关于该主题的大多数指导似乎直接指向如何为最初用 JavaScript 编写的库创建或查找类型定义,但是用 TypeScript 编写的库呢,似乎有某种机制可以共享生成的 js 文件和相应的类型定义文件应该是常见的地方,但我找不到任何人试图为私人或公共图书馆这样做。也许我在寻找错误的地方?有没有关于创建和使用 TypeScript 库的故事。

【问题讨论】:

  • 新的 Angular 2 是使用 TypeScript 从头开始​​构建的。您可以查看 git hub 存储库以了解该做什么。
  • 我用的是my own small library用TS写的。它可以通过 NuGet 或 Bower 同时使用 d.tsjs 加载。
  • 我曾考虑过查看 Angular 2,但我不确定他们是否将其类型定义文件作为其常规面向客户端的包的一部分公开,或者是否只是将其放入 DefinitiveTyped 中看到它是一个开源框架。
  • propjet.d.ts 是手写的吗?我认为手工编写这些只是最初用 vanilla JavaScript 编写的库所必需的,并且希望它可以作为编译的一部分从 TypeScript 生成。
  • 为打字稿项目中使用的打字稿库创建 d.ts 文件完全不相关。

标签: typescript libraries


【解决方案1】:

要创建一个可供 TS 项目使用的 TS 库,您不必做很多事情。

(对不起,如果示例过于冗长。)

图书馆

假设您的源文件是用 TypeScript 编写的,您需要进行以下配置调整:

tsconfig.json

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "module": "commonjs",
    "removeComments": false,
    "sourceMap": true,
    "outDir": "dist/",
    "declaration": true
  },
  "filesGlob": [
    "**/*.ts",
    "!node_modules/**/*"
  ],
  "exclude": [
    "node_modules",
    "typings/global",
    "typings/global.d.ts"
  ],
  "compileOnSave": true
}

这里重要的基本上是declarations: true,告诉TS编译器生成d.ts文件。

package.json

{
  "name": "my-typescript-library",
  "description": "...",
  "version": "1.0.0",
  "main": "./dist/my.service.js",
  "typings": "./dist/my.service.d.ts",
  "license": "ISC",
  "dependencies": {
    ...
  },
  "devDependencies": {
    "typescript": "^1.8.10",
    "typings":"^1.0.4",
    ...
  }
}

这里重要的是“main”和“typings”,它们是库中服务的入口点。因此,如果有人要require("my-typescript-library"),那么将使用此处列出的文件。 Typings 字段类似,但显然有助于 TypeScript。

然后您将这个库推送到 Github、Bitbucket 或其他任何地方。

消费者

这里不需要太多。

package.json

向您的库添加依赖项:

{
  ...,
  "dependencies": {
    "my-typescript-library": "git+ssh://bitbucket.org/you/my-typescript-library",
    ...
  }
}

在此示例中,您将需要一个 SSH 密钥。

然后你只需导入库。

my_file.ts

import {MyService} from "my-typescript-library";

所以你有了它,一个在 TypeScript 应用程序中使用的 TypeScript 库。希望这是一个足够的答案(并且足够清楚),否则请给我留言。

【讨论】:

    【解决方案2】:

    好吧,我认为你可以为此目的使用模块,模块就像 c# 中的命名空间,例如

    //File Utils.ts
    module Utils
    {
        export class UtilsClass
        {
            do(param: string)
            {
                //do something
            }
        }
    }
    
    //Another ts file
    var formatter = new Utils.UtilsClass();
    formatter.do("str");
    

    问候,

    【讨论】:

    • 有没有办法将模块打包以供外部使用?例如,如果我有一个像 underscore 这样用 TypeScript 编写的库,并且我想在公司的各种私人项目中使用它,并且可能还会在某个时候公开发布它。我希望通过某种方式导出 d.ts 定义文件以及 .js JavaScript 文件作为编译器中的一个选项。
    • 但是,这只是一个ts文件! (是的,一个 .js),所以你可以创建一个 nuget 包或一个 npm 包来像任何其他 js 库/框架一样共享它......或者我不明白你需要什么
    • 我的问题不是关于是否有可能,而是关于实现这一目标的预期传统方式是什么。 TypeScript 似乎是创建 JavaScript 库的理想候选语言,但似乎主要支持的案例是 TypeScript 应用程序使用 vanilla JS 库,反之亦然,但不是 TypeScript 使用 TypeScript,这对我来说是我最希望自然地工作的。
    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2010-09-15
    • 1970-01-01
    • 2015-05-31
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多