当我使用 ts-node 编写 运行 脚本时,为什么 for..in 不起作用?
Why for..in do not work when I run script with ts-node?
这是./src/repro.ts
class P {
do() { console.log('d'); }
}
const x = new P();
console.log('for in:');
for (const key in x) {
console.log(key);
}
我正在使用这个 ./tsconfig.json
编译它(也尝试过完全没有配置,或者使用 ES2019 目标和 lib):
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"lib": ["ES6"],
"esModuleInterop": true,
"noImplicitAny": true,
"strictNullChecks": true,
"moduleResolution": "node",
"sourceMap": false,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": ["node_modules/*", "src/types/*"]
}
},
"include": ["src/**/*"]
}
像这样:
> tsc -v
Version 4.3.5
> tsc ./src/repro.ts
产生这个 ./src/repro.js
var P = /** @class */ (function () {
function P() {
}
P.prototype["do"] = function () { console.log('d'); };
return P;
}());
var x = new P();
console.log('for in:');
for (var key in x) {
console.log(key);
}
我运行它(节点v10,12,14,16相同):
> node ./src/repro.js
for in:
do
我的问题是,为什么这个命令不输出方法“do”:
> ts-node ./src/repro.ts
for in:
正如@Phil 所说,您不能使用 for..in 遍历对象的方法,但可以使用 Object.getOwnPropertyNames() 为您提供方法名称数组并遍历这样你就可以做到:
class P {
do() { console.log('d'); }
}
const x = new P();
// Logs your properties
for (const key in x) {
console.log(key);
}
// Logs your methods names
for (const key of Object.getOwnPropertyNames(x.__proto__) {
console.log(key);
}
// ["constructor", "do"]
请记住,数组还将包含构造方法名称。
我的直接错误是这个命令:tsc ./src/repro.ts
。当你编译一个文件时,tsc
没有使用 tsconfig.json
,所以它生成了一个 pre ES6 代码,它没有 类 和方法,for..in
适用于它。
这是./src/repro.ts
class P {
do() { console.log('d'); }
}
const x = new P();
console.log('for in:');
for (const key in x) {
console.log(key);
}
我正在使用这个 ./tsconfig.json
编译它(也尝试过完全没有配置,或者使用 ES2019 目标和 lib):
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"lib": ["ES6"],
"esModuleInterop": true,
"noImplicitAny": true,
"strictNullChecks": true,
"moduleResolution": "node",
"sourceMap": false,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": ["node_modules/*", "src/types/*"]
}
},
"include": ["src/**/*"]
}
像这样:
> tsc -v
Version 4.3.5
> tsc ./src/repro.ts
产生这个 ./src/repro.js
var P = /** @class */ (function () {
function P() {
}
P.prototype["do"] = function () { console.log('d'); };
return P;
}());
var x = new P();
console.log('for in:');
for (var key in x) {
console.log(key);
}
我运行它(节点v10,12,14,16相同):
> node ./src/repro.js
for in:
do
我的问题是,为什么这个命令不输出方法“do”:
> ts-node ./src/repro.ts
for in:
正如@Phil 所说,您不能使用 for..in 遍历对象的方法,但可以使用 Object.getOwnPropertyNames() 为您提供方法名称数组并遍历这样你就可以做到:
class P {
do() { console.log('d'); }
}
const x = new P();
// Logs your properties
for (const key in x) {
console.log(key);
}
// Logs your methods names
for (const key of Object.getOwnPropertyNames(x.__proto__) {
console.log(key);
}
// ["constructor", "do"]
请记住,数组还将包含构造方法名称。
我的直接错误是这个命令:tsc ./src/repro.ts
。当你编译一个文件时,tsc
没有使用 tsconfig.json
,所以它生成了一个 pre ES6 代码,它没有 类 和方法,for..in
适用于它。