访问者仅在定位ECMAScript 5及更高版本时可用

时间:2016-12-07 06:25:22

标签: javascript typescript ecmascript-5 accessor

我正在尝试运行此代码,但它给了我以下错误:

  

Animal.ts(10,13):错误TS1056:访问者仅在以下时可用   针对ECMAScript 5及更高版本。 Animal.ts(14,13):错误TS1056:   访问者仅在定位ECMAScript 5及更高版本时可用。

interface IAnimal{
    name : string;
    sayName():string;
}

class AnimalImpm implements IAnimal{
    private _name : string = '[Animal]';
    get name():string{
        return this._name;
    }

    set name(name:string){
        this._name = name;
    }

    constructor(name:string){
        this.name = name;
    }

    sayName():string {
        console.log(`My name is ${this.name}`);
        return "Hello";
    }
}

14 个答案:

答案 0 :(得分:30)

唯一对我有用的是在macOS和Windows上指定Target

tsc --target es5 script.ts

您可以在终端上运行该命令。

答案 1 :(得分:16)

尝试在项目中设置tsconfig.json文件:

{
  "compilerOptions": {
  "target": "es5"
  }
  "files": []
}

将告诉typescript编译器专门定位一个版本。

答案 2 :(得分:7)

我遇到了同样的问题。我从docs读到的是,如果指定文件,则会忽略tsconfig.json文件。

enter image description here

我的tsconfig.json文件

{
  "compilerOptions": {
    "target": "es5"
  },
  "include": [
    "*.ts"
  ]
}

我从命令行运行它

tsc && node *.js

答案 3 :(得分:2)

我知道这是一个古老的对话,但我认为对于所有开发人员来说,这个解决方案可能是一个非常有用的命令。

您可以在终端,命令提示符,Git Bash等中使用此命令轻松解决:

tsc --target ES2016 Animal.ts --watch

tsc --target es5 Animal.ts --watch

--watch是可选的,意味着您不需要在每次修改中编译代码。

答案 4 :(得分:1)

在Windows中,

tsc --target es5 filename.ts

选项可以是:' es3',' es5',' es6',' es2015',' es2016&#39 ;,' es2017',' esnext'。 (没有'')

答案 5 :(得分:1)

遇到了同样的问题,它可以在单个文件中使用!

if (!_inAir && Input.GetButtonDown("Jump")) {

  • tsc -target "es5" filename && node filename带引号
  • 不需要提及文件扩展名

  • "es5"-将打字稿转换为“ es5” JavaScript

  • tsc -target "es5" filename-运行已编译的javascript文件

答案 6 :(得分:0)

尝试使用Visual Studio Code编译TypeScript代码时遇到了同样的问题。 这解决了这个问题:

1) tsconfig.json - 在target中添加compilerOptions

{
    "compilerOptions": {
        "target": "es5",  // <-- here!
        "module": "commonjs",
        "sourceMap": true
    }
}

2) tasks.json - 添加target参数:

{
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "build",
            "type": "process",
            "command": "tsc",
            "args": [
                "ts/Program.ts",
                "--outDir", "js",
                "--sourceMap",
                "--watch",
                "--target", "es5"  // <-- here!
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always"
            },
            "problemMatcher": "$tsc"
        }
    ]
}

答案 7 :(得分:0)

使用Visual Stido 2017?
1-解决方案资源管理器&gt;右键单击到项目
2-添加&gt;新项目
3-(搜索部分&gt;键入此&gt;打字稿)
4-选择“TypeScript Json配置文件”

多数民众赞成在这一步骤结束时,tsconfig.json将被添加到项目中,默认设置应用于ES5

你不必改变任何东西。只需重新编译你的项目并输出错误。

答案 8 :(得分:0)

在这里,您需要将开关传递给类型脚本编译器,因此它以ECMAScript文件为目标。为此,请在终端

中输入以下代码
  

tsc(你的ts档案).ts - 目标ES5   并运行你的bulid js文件

     

节点(你的js文件)

答案 9 :(得分:0)

尝试使用tsc myTS.ts --target ES5

这是因为TypeScript应该Traget ECMA脚本5编译器。

答案 10 :(得分:0)

如果您要处理单个文件,则可以这样做

tsc your-file.ts --target ES2016 --watch

如果您希望在 tsconfig.json 中了解整个项目的配置

{ "compilerOptions": { "target": "ES2016" } "files": [] }

您可能要使用ECMAScript数字“ es6”,“ es7”,“ es8” 或发行年份,例如“ ES2015”,“ ES2016”,“ ES2017”

ESNext 以最新支持的ES建议功能为目标。

答案 11 :(得分:0)

就我而言,我只需要添加目标即可。

 tsc *.ts --target ES5 && node *.js

答案 12 :(得分:0)

这是一个简单的解决方案

tsc file.ts --target ES5 && node file.js 

注意:请确保您使用文件名。仅当.ts文件的名称为文件时,这才适用。

我认为编写该代码的一种更简洁的方式是

class AnimalImpm {
        constructor(private _name?:string){
            this.name = name;
        }

        get name():string{
            return this._name;
        }

        set name(name:string){
            this._name = name;
        }

        sayName():string {
            console.log(`My name is ${this.name}`);
            return "Hello";
        }
    }

let data = new AnimalImpm('Animal');
    data.name;
    data.name = 'newAnimal';
    data.sayName();

答案 13 :(得分:0)

最后为我解决了。运行文件,然后指定目标标志

tsc script.ts --t es5 enter link description here