0

在 Visual Studio 2017 的 ASP.Net Core 项目中尝试DayPilot Scheduler.d.ts ,我发现了文件,并认为这就是我获得 IntelliSense 的方式,使用 TypeScript 针对库生成我的 JavaScript。

我没有使用 TypeScript 的经验,所以我所做的可能是不正确的,到目前为止,根据 Visual Studio 的建议,我有一个.ts如下文件:

import { DayPilot } from "../wwwroot/lib/daypilot-pro/scripts/daypilot-all.min";
var dp = new DayPilot.Scheduler("dp");
dp.scale = "Day";
dp.timeHeaders = [
    { groupBy: "Month", format: "MMM yy" },
    { groupBy: "Day" }
];

tsconfig.jsonVisual Studio 在我的项目根目录中创建的默认值

{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5"
  },
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

这会产生下面的 JavaScript,它在浏览器中不起作用:

未捕获的 ReferenceError:未在 dp.js:2 定义导出

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var daypilot_all_min_1 = require("../wwwroot/lib/daypilot-pro/scripts/daypilot-all.min");
var dp = new daypilot_all_min_1.DayPilot.Scheduler("dp");
dp.scale = "Day";
dp.timeHeaders = [
    { groupBy: "Month", format: "MMM yy" },
    { groupBy: "Day" }
];
dp.allowMultiMove = true;
//# sourceMappingURL=dp.js.map

我尝试.d.ts使用以下语法引用该文件,但随后我的脚本Cannot find name DayPilot中出现错误,建议将导入作为潜在的修复。

///<reference path="../wwwroot/lib/daypilot-pro/scripts/daypilot-all.min.d.ts"/>

我做错了什么,我应该如何使用提供的.d.ts

4

1 回答 1

0

默认情况下,TypeScript 为Node 支持的CommonJS编译,但浏览器不支持。为了让您的代码正常工作,有一些方法可以采取:

  1. 设置"module": "none",通过<script>标签加载 daypilot 脚本并DayPilot在 ts 文件中全局访问而不是导入它。一个简单直接的解决方案,但这里的缺点是您失去了模块带来的好处,并且类型定义也可能不是为了适应这种用法而编写的。

  2. "module": "es6"在您的 tsconfig.json 中设置,并使用浏览器模块。这样做的缺点是 ES 模块仅在较新的浏览器中受支持,如果您需要支持它们,则不会在较旧的浏览器中工作。

  3. 使用模块捆绑器。Webpack是一种流行且灵活的选择,但涉及大量的学习和工具开销。Parcel是一个很好的替代方案,它提供了开箱即用的 TypeScript 支持。如果您只是想让事情正常运行,我会选择 Parcel。

于 2018-03-31T00:09:05.350 回答