![](/img/trans.png)
[英]Unknown file extension ".ts" error appears when trying to run a ts-node script
[英]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.