Typescript 有保证的编译错误

Typescript 有保证的编译错误,typescript,Typescript,编译此文件时,出现以下错误: 44:16-错误TS2693:“承诺”仅指类型,但在此处用作值 在这种情况下,我如何正确描述承诺 export interface IFighter { _name: string; _health: number; _power: number; health: () => number; name: () => string; setDamage: (damage: number) => void

编译此文件时,出现以下错误:

44:16-错误TS2693:“承诺”仅指类型,但在此处用作值

在这种情况下,我如何正确描述
承诺

export interface IFighter {
    _name: string;
    _health: number;
    _power: number;
    health: () => number;
    name: () => string;
    setDamage: (damage: number) => void;
    hit: (enemy: Fighter, point: number) => void;
    knockout: () => Promise<Promise<any>>;


}


export class Fighter implements IFighter { 
    _name: string;
    _health: number;
    _power: number;
  constructor(name: string, health: number, power: number) {
    this._name = name;
    this._health = health;
    this._power = power;
  }

  health(): number {
    return this._health;
  }

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

  setDamage(damage: number): void {
    this._health = this._health - damage;
    console.log(`${this._name} got ${damage} dmg. ${this._health}hp less`);
  }

  hit(enemy: Fighter, point: number): void {
    let damage: number = point * this._power;
    enemy.setDamage(damage);
  }

  knockout(): Promise<any> {
    return new Promise((resolve) => {
      console.log("time is over");
      setTimeout(() => {
        resolve((): void => {});
      }, 500);
    });
  }
}
导出接口IFighter{
_名称:字符串;
_健康:数字;
_功率:数字;
健康:()=>数字;
名称:()=>字符串;
设置伤害:(伤害:数量)=>无效;
命中:(敌人:战斗机,点数)=>无效;
淘汰赛:()=>承诺;
}
导出类战斗机实现IFighter{
_名称:字符串;
_健康:数字;
_功率:数字;
构造函数(名称:字符串,运行状况:编号,电源:编号){
这个。_name=name;
这就是健康;
这个。_power=power;
}
health():数字{
把这个还给我;
}
name():字符串{
返回此。\u名称;
}
设置伤害(伤害:数量):无效{
这个健康=这个健康-伤害;
log(`this.\u name}得到${damage}dmg.${this.\u health}hp less`);
}
命中(敌人:战斗机,点数):无效{
让伤害:数字=点*这个。_力量;
敌方造成的伤害;
}
承诺{
返回新承诺((解决)=>{
console.log(“时间已过”);
设置超时(()=>{
解析(():void=>{});
}, 500);
});
}
}

IFighter
界面中更改您:

这一个<代码>淘汰:()=>承诺

击败:()=>承诺


Promise
是没有意义的,因为不管怎样,它将被表示为
Promise

在您的
IFighter
界面中更改您:

这一个<代码>淘汰:()=>承诺

击败:()=>承诺


Promise
是没有意义的,因为不管怎样,它将被表示为
Promise

您特别得到的错误可能是由于您的目标是
es5
<代码>es5
没有内置承诺。有承诺类型,但在
es5
typescript库中没有定义承诺构造函数。如果您的运行时有
Promise
构造函数,或者您有一个polyfill,那么您可以向
tsconfig.json
添加
lib
属性,告诉typescript添加承诺的定义(完整的
es2015
承诺)


编辑正如@Oleksii指出的
淘汰:()=>承诺
应该是
knockout:()=>Promise
但这与问题中的错误没有特别关系

您特别得到的错误可能是由于您的目标是
es5
<代码>es5
没有内置承诺。有承诺类型,但在
es5
typescript库中没有定义承诺构造函数。如果您的运行时有
Promise
构造函数,或者您有一个polyfill,那么您可以向
tsconfig.json
添加
lib
属性,告诉typescript添加承诺的定义(完整的
es2015
承诺)


编辑正如@Oleksii指出的
淘汰:()=>承诺
应该是
knockout:()=>Promise
但这与问题中的错误没有特别关系

请以文本形式发布错误消息,而不是以文本图片形式发布(或至少在图片之外发布)。原因:请以文本形式发布错误消息,而不是以文本图片形式发布(或至少在图片之外发布)。原因:@titian cernicova dragomirmy配置文件有
“target”:“es6”
,但我还是添加了您的
答案,仍然得到了相同的答案error@tranntus这是导致错误的常见原因。你是如何建立你的项目的?您确定正在提取您编辑的tsconfig.json吗?(检查输出,查看生成的js conatins arraow函数或类是否应编译为es2015,或者这些功能是否已向下编译为简单函数,如果将其作为es5的目标,则会如此)@titian cernicova dragomirmy配置文件具有
“target”:“es6”
,但无论如何,我添加了你的
lib
答案,仍然得到了相同的答案error@tranntus这是导致错误的常见原因。你是如何建立你的项目的?您确定正在提取您编辑的tsconfig.json吗?(检查输出,查看生成的js conatins arraow函数或类是否应该编译到es2015,或者这些功能是否像针对es5那样被下编译为简单函数)
export interface IFighter {
    _name: string;
    _health: number;
    _power: number;
    health: () => number;
    name: () => string;
    setDamage: (damage: number) => void;
    hit: (enemy: Fighter, point: number) => void;
    knockout: () => Promise<Promise<any>>;


}


export class Fighter implements IFighter { 
    _name: string;
    _health: number;
    _power: number;
  constructor(name: string, health: number, power: number) {
    this._name = name;
    this._health = health;
    this._power = power;
  }

  health(): number {
    return this._health;
  }

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

  setDamage(damage: number): void {
    this._health = this._health - damage;
    console.log(`${this._name} got ${damage} dmg. ${this._health}hp less`);
  }

  hit(enemy: Fighter, point: number): void {
    let damage: number = point * this._power;
    enemy.setDamage(damage);
  }

  knockout(): Promise<any> {
    return new Promise((resolve) => {
      console.log("time is over");
      setTimeout(() => {
        resolve((): void => {});
      }, 500);
    });
  }
}
{
    ....
    "lib": ["es5","es2015.promise","dom", "scripthost"] 
    ....
}