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