首次安装使用typescript报错
程序员文章站
2024-03-25 11:49:52
...
最近想学typescript,用npm命令
npm install -g typescript
安装后,运行
tsc -v
想查看版本检测是否安装成功,随后报错了
看得我一脸懵逼。网上也查不到任何信息。
没办法只好看代码。
打开tsc.js文件,看到报错源头5970行,是这么一句,
var textToKeyword = new ts.Map(ts.getEntries(textToKeywordObj));
把textToKeywordObj和ts.getEntries的返回值分别用console.log输出后,
得知textToKeywordObj是这么一个对象,
{ abstract:
any: 128,
as: 126,
asserts: 1
bigint: 15
boolean: 1
break: 80,
case: 81,
catch: 82,
class: 83,
continue:
const: 84,
constructo
debugger:
declare: 1
default: 8
delete: 88
do: 89,
else: 90,
enum: 91,
export: 92
extends: 9
false: 94,
finally: 9
for: 96,
from: 152,
function:
get: 134,
if: 98,
implements
import: 99
in: 100,
infer: 135
instanceof
interface:
is: 136,
keyof: 137
let: 118,
module: 13
namespace:
never: 140
new: 102,
null: 103,
number: 14
object: 14
package: 1
private: 1
protected:
public: 12
readonly:
require: 1
global: 15
return: 10
set: 145,
static: 12
string: 14
super: 105
switch: 10
symbol: 14
this: 107,
throw: 108
true: 109,
try: 110,
type: 148,
typeof: 11
undefined:
unique: 15
unknown: 1
var: 112,
void: 113,
while: 114
with: 115,
yield: 124
async: 129
await: 130
of: 155 }
entry为一个数组:(entry为ts.getEntries返回值)
[ ,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
[ 'abstract', 12
[ 'any', 128 ],
[ 'as', 126 ],
[ 'asserts', 127
[ 'bigint', 154
[ 'boolean', 131
[ 'break', 80 ],
[ 'case', 81 ],
[ 'catch', 82 ],
[ 'class', 83 ],
[ 'continue', 85
[ 'const', 84 ],
[ 'constructor',
[ 'debugger', 86
[ 'declare', 133
[ 'default', 87
[ 'delete', 88 ]
[ 'do', 89 ],
[ 'else', 90 ],
[ 'enum', 91 ],
[ 'export', 92 ]
[ 'extends', 93
[ 'false', 94 ],
[ 'finally', 95
[ 'for', 96 ],
[ 'from', 152 ],
[ 'function', 97
[ 'get', 134 ],
[ 'if', 98 ],
[ 'implements',
[ 'import', 99 ]
[ 'in', 100 ],
[ 'infer', 135 ]
[ 'instanceof',
[ 'interface', 1
[ 'is', 136 ],
[ 'keyof', 137 ]
[ 'let', 118 ],
[ 'module', 138
[ 'namespace', 1
[ 'never', 140 ]
[ 'new', 102 ],
[ 'null', 103 ],
[ 'number', 143
[ 'object', 144
[ 'package', 119
[ 'private', 120
[ 'protected', 1
[ 'public', 122
[ 'readonly', 14
[ 'require', 142
[ 'global', 153
[ 'return', 104
[ 'set', 145 ],
[ 'static', 123
[ 'string', 146
[ 'super', 105 ]
[ 'switch', 106
[ 'symbol', 147
[ 'this', 107 ],
[ 'throw', 108 ]
[ 'true', 109 ],
[ 'try', 110 ],
[ 'type', 148 ],
[ 'typeof', 111
[ 'undefined', 1
[ 'unique', 150
[ 'unknown', 151
[ 'var', 112 ],
[ 'void', 113 ],
[ 'while', 114 ]
[ 'with', 115 ],
[ 'yield', 124 ]
[ 'async', 129 ]
[ 'await', 130 ]
[ 'of', 155 ] ]
网上搜了下Iterator value undefined is not an entry object,查到这么一篇博客,ES6语法,里面有这么一句,
用数组创建Map结构数组必须为二维数组,否则会报这个错Iterator value 1 is not an entry object。和上面的错误很像。
很明显上面的那段代码也是想用数组创建一个Map结构,但是参数非法,所以报错了。数组中有大量的空成员,导致输出大量逗号,也使这个数组不为二维数组。
为什么会输出大量空成员呢,我又看了下ts.getEntries函数,
var _entries = Object.entries ? Object.entries : function (obj) {
var keys = getOwnKeys(obj);
var result = Array(keys.length);
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
var key = keys_1[_i];
result.push([key, obj[key]]);
}
return result;
};
function getEntries(obj) {
return obj ? _entries(obj) : [];
}
ts.getEntries = getEntries;
里面出问题的一段代码是
var result = Array(keys.length);
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
var key = keys_1[_i];
result.push([key, obj[key]]);
}
他创建了一个keys.length大小的数组,然后再往后面添加成员,这导致前面有大量空的成员,最后得到的数组大小为2*keys.length。
可以这么改:
var result = [];
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
var key = keys_1[_i];
result.push([key, obj[key]]);
}
return result;
最后运行成功了。
不知道为什么会遇到这种问题。我用的typescript是4.0.2。node版本是4.6.2。有知道原因的请跟我说下
上一篇: 程序的动态链接(3):延迟绑定
推荐阅读
-
首次安装使用typescript报错
-
CentOS在使用yum install php-mysql安装php时报错的解决方法
-
php-extension - php 使用phpize 安装扩展readline , 安装后可以进入命令行交互模式但敲入第二行php代码后报错!!
-
typescript的安装使用(1)
-
ubuntu下使用lnmp环境安装laravel报错
-
pycharm 使用心得(一)安装和首次使用
-
Python首次安装后运行报错(0xc000007b)的解决方法
-
Python首次安装后运行报错(0xc000007b)的解决方法
-
Vue+Typescript中在Vue上挂载axios使用时报错
-
pycharm 使用心得(一)安装和首次使用