// **.tsfunction a() { console.log(this);}a();
执行命令 ts-node **.ts
正常输出this
// **.tsimport './**'function a() { console.log(this);}a();
执行命令 ts-node **.ts
输出undefined
这是为什么?可以避免吗?
两个点,涉及到 esm
和 strict mode
import
则代表这是一个 es module,会自动开启 strict mode
strict mode
下,没有指定 this 的函数中,this 值为 undefined
当你使用 import './**'
,你实际上是在尝试导入当前目录下的所有模块。这在你尝试导入的文件中可能不会产生预期的效果,因为 this
的值取决于函数被如何调用。
在JavaScript中,this
的值在函数被调用时决定,而不是在函数被创建时决定。在严格模式下,如果函数是单独调用的,那么 this
的值就是 undefined
。
在你的例子中,a
函数被单独调用,所以 this
的值是 undefined
。你可以通过将 a
函数绑定到一个特定的对象上,来避免这个问题。例如:
// **.tsimport { bind } from 'lodash'; // lodash 是 JavaScript 实用程序库function a() { console.log(this);}const boundA = bind(a, { name: 'boundA' }); // 将 a 绑定到一个有 name 属性的对象上boundA(); // 输出: { name: 'boundA' }
如果你想要更深入地了解 this
在JavaScript中的工作原理,我建议你阅读一些关于该主题的书籍或教程。
我创建了一个ts文件如下: 当我运行时候报错: 如果我用require就可以引入。 执行成功。 是否这个意思意味的是,ts-morph 这个库没有导出esm模块,只导出了cjs模块?
options 怎么会是这个类型?应当是{ [key: string | number]: any }[] 才对啊。 是哪里出了问题?如何解决呢? "vue-tsc": "^1.8.27"
本文向大家介绍Python import与from import使用及区别介绍,包括了Python import与from import使用及区别介绍的使用技巧和注意事项,需要的朋友参考一下 下面介绍下Python import与from import使用,具体内容如下所示: Python程序可以调用一组基本的函数(即内建函数),比如print()、input()和len()等函数。Python本
RESTful API using Node.js, Express, Mongoose & TypeScript This is a boilerplate for building scalable and robust REST APIs using Node.js & TypeScript. Table of Contents Prerequisites Features Getting
下面这一段 TS 代码是什么意思,如果我把 T 传入 Animal 类型,Simplify 的类型是什么样子的?仍然是跟 Animal 一样的类型吗?