angularjs 在Angular和TypeScript中使用矩

jmp7cifd  于 2023-08-02  发布在  Angular
关注(0)|答案(3)|浏览(117)

我是TypeScript的新手,我已经有一段时间没有做过任何严肃的JavaScript开发了,所以我可能错过了一些显而易见的东西。
我尝试在Angular 1应用程序中使用TypeScript。
我使用的是Angular 1.6.5,Moment 2.17.1和TypeScript 2.17.1。我从npm @types\angular包中安装了Angular typings。Angular的Intelligisense等正在VS Code中工作。
我已经在GitHub上发布了示例代码:https://github.com/kevinkuszyk/moment-angular-typescript

第一个错误

我的示例应用程序在浏览器中运行,但TypeScript编译器抱怨它找不到Moment:

app/controller.ts(3,20): error TS2503: Cannot find namespace 'moment'.
app/controller.ts(6,30): error TS2304: Cannot find name 'moment'.

字符串

尝试使用/编译器指令

为了解决这个问题,我尝试添加以下///编译器指令:

/// <reference path="../node_modules/moment/moment.d.ts" />


但这并不能修复TypeScript编译器:

app/controller.ts(5,20): error TS2503: Cannot find namespace 'moment'.
app/controller.ts(8,30): error TS2304: Cannot find name 'moment'.

导入时刻

接下来,我尝试使用他们文档中的说明导入Moment:

import * as moment from 'moment';


但这使得TypeScript产生了不同的错误:

app/controller.ts(13,5): error TS2686: 'angular' refers to a UMD global, but the current file is a module. Consider adding an import instead.

导入Angular

我还引进了Angular。这修复了TypeScript:

import * as angular from "angular";


但现在该应用程序不能在浏览器中运行:

Uncaught ReferenceError: require is not defined
    at controller.js:2

使用Require.JS

最后我尝试添加Require.JS,但这只会导致一个不同的运行时错误:

Uncaught Error: Module name "moment" has not been loaded yet for context: _. Use require([])
http://requirejs.org/docs/errors.html#notloaded
    at makeError (require.js:168)
    at Object.localRequire [as require] (require.js:1433)
    at requirejs (require.js:1794)
    at controller.js:2


问题
1.我错过了什么明显的东西吗?
1.引用npm主包附带的d.ts文件,而不是单独的@types包,最佳实践是什么?
1.如何在不使用外部模块加载器的情况下使其工作?

nxagd54h

nxagd54h1#

看起来这是Moment的d.ts文件的已知问题(请参阅问题#3763#3808#3663)。
当我们等待官方修复时,这对我起了作用。
变更:

export = moment;

字符串
对此:

declare module "moment" {
    export = moment;
}

cu6pst1q

cu6pst1q2#

尝试在tsconfig.json文件中显式声明@types作用域包以键入Root:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": false,
        "sourceMap": false,
        "typeRoots": [
            "./node_modules/@types"
        ]
    }
}

字符串
确保类型定义正确安装在node_modules/@types/...中,并且TypeScript编译器是最新的。

9jyewag0

9jyewag03#

我试图非常缓慢地将一个过时的项目提升到现代标准,所以我努力尝试让其他解决方案工作,而同样的问题间歇性地发生在我身上。
最终,我决定用一个维护的替代品来替换Moment,正如Moment网站上所建议的那样:https://momentjs.com/docs/#/-project-status/
我强烈建议任何阅读这篇文章的人也这样做。这一刻很棒,但该说再见了。

相关问题