JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了typescript – “…解析为非模块实体,无法使用此构造导入”是什么意思?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些TypeScript文件: @H_634_2@myClass.ts

class MyClass {
  constructor() {
  }
}
export = MyClass;

MyFunc.ts

function fn() { return 0; }
export = fn;
@H_634_2@myConsumer.ts

import * as MC from './MyClass';
import * as fn from './MyFunc';
fn();

这使我尝试使用新的错误

当尝试调用fn()

是什么赋予了?

解决方法

为什么它不起作用
import * as MC from './MyClass';

这是ES6 / ES2015风格的导入语法.其确切含义是“从./MyClass加载的模块命名空间对象并将其本地用作MC”.值得注意的是,“模块命名空间对象”仅由具有属性的普通对象组成. ES6模块对象不能作为一个函数或新的被调用.

再说一遍:ES6模块命名空间对象不能作为一个函数或新的调用.

使用*作为X从模块导入的东西被定义为只具有属性.在下级的CommonJS中,这可能不会被完全尊重,但是TypeScript会告诉你标准定义的行为.

什么工作?

您需要使用COR_67_11845@monJS风格的导入语法才能使用此模块:

import MC = require('./MyClass');

如果您同时控制这两个模块,可以使用导出默认值:

@H_634_2@myClass.ts

export default class MyClass {
  constructor() {
  }
}
@H_634_2@myConsumer.ts

import MC from './MyClass';

我很伤心规则是愚蠢的

这将是很好的使用ES6导入语法,但现在我必须这样做导入MC = require(‘./ MyClass’);事情?这是2013年!瘸!但悲伤是编程的正常部分.请跳到库伯勒 – 罗斯模型的第五阶段:验收.

这里的TypeScript告诉你这不工作,因为它不起作用.有一些黑客(为MyClass添加一个命名空间声明是一种流行的方式来假装这个工作),并且它们今天可能在你的特定的下级模块绑定器(例如汇总)中工作,但这是虚幻的.在野外没有任何ES6模块实现,但永远不会是真的.

展现未来的自我,试图运行在一个neato本机ES6模块实现,并发现您已经设置了自己的重大失败,尝试使用ES6语法来做一些ES6显然不做的事情.

我想利用我的非标准模块加载器

也许你有一个模块加载器,当没有存在时,“有帮助”创建默认导出.我的意思是,人们为了理由而制定标准,但忽略标准是有趣的,我们可以认为这是一件很酷的事情.

将MyConsumer.ts更改为:

import A from './a';

并指定allowSyntheticDefaultImports命令行或tsconfig.json选项.

请注意,allowSyntheticDefaultImports根本不会更改代码的运行时行为.它只是一个告诉TypeScript的标志,当不存在时,您的模块加载器创建默认导出.它不会神奇地使您的代码工作在Nodejs以前没有.

大佬总结

以上是大佬教程为你收集整理的typescript – “…解析为非模块实体,无法使用此构造导入”是什么意思?全部内容,希望文章能够帮你解决typescript – “…解析为非模块实体,无法使用此构造导入”是什么意思?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。