Generics 为什么';你不抱怨吗?

Generics 为什么';你不抱怨吗?,generics,es6-promise,typescript-typings,typescript2.0,Generics,Es6 Promise,Typescript Typings,Typescript2.0,编译到ES2015时,Promise类型有一种奇怪的行为 在下面的代码中,前两个赋值(str和strA)失败,抱怨string | number不能赋值给string,因为number不能赋值给string,我认为这是预期的行为。但是当我使用类似的赋值时,编译器不会抛出错误。这是正常的还是一个错误 函数strOrNumFn():字符串|编号{ return Math.random()>0.5?'some string':9; } 常量strOrNum=strOrNumFn(); //此操作失败,

编译到ES2015时,Promise类型有一种奇怪的行为

在下面的代码中,前两个赋值(
str
strA
)失败,抱怨
string | number
不能赋值给
string
,因为
number
不能赋值给
string
,我认为这是预期的行为。但是当我使用类似的赋值时,编译器不会抛出错误。这是正常的还是一个错误

函数strOrNumFn():字符串|编号{
return Math.random()>0.5?'some string':9;
}
常量strOrNum=strOrNumFn();
//此操作失败,因为无法将数字分配给字符串
常量str:string=strOrNum;
//同样的原因也是如此
常量strA:Array=[strOrNum];
//这并没有失败,但我认为应该
常量strP:Promise=Promise.resolve(strOrNum);
你可以

提前谢谢

这应该是一项工作:

function strOrNumFn (): string | number {
    return Math.random() > 0.5 ? 'some string' : 9;
}

const strOrNum = strOrNumFn();

// This fails as number is not assignable to string
const str: string | number  = strOrNum;

// This fails same reason
const strA: Array<string | number> = [strOrNum];

// this doesn't fail, but I think it should
const strP: Promise<string | number> = Promise.resolve(strOrNum);
函数strOrNumFn():字符串|编号{
return Math.random()>0.5?'some string':9;
}
常量strOrNum=strOrNumFn();
//此操作失败,因为无法将数字分配给字符串
常量str:string | number=strOrNum;
//同样的原因也是如此
常量strA:Array=[strOrNum];
//这并没有失败,但我认为应该
常量strP:Promise=Promise.resolve(strOrNum);

当我跟随你的链接到游乐场时,我在所有这些语句中都看到了编译错误——包括你说的没有失败的语句。