簡體   English   中英

為什么當我使用 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

我的問題是,為什么這個命令不 output 方法“做”:

> ts-node ./src/repro.ts   
for in:

正如@Phil 所說,您不能使用 for..in 遍歷 object 的方法,但您可以使用 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適用於它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM