Javascript Typescript-索引签名交叉点问题

Javascript Typescript-索引签名交叉点问题,javascript,typescript,typescript2.0,typescript1.8,Javascript,Typescript,Typescript2.0,Typescript1.8,我有以下类型: type MyType = { ['x']?: string; ['y']?: number; } & { [key: string]: string }; 当我写这篇文章时: const a: MyType = { 'x': 'str', 'y': 5 } const b: MyType = {}; b['x'] = 'str2'; b['y'] = 6 我得到一个错误(y是一个数字,但需要一个字符串),根据索引签名,这是有意义的。

我有以下类型:

type MyType = {
    ['x']?: string;
    ['y']?: number;
} & { [key: string]: string };
当我写这篇文章时:

const a: MyType = {
    'x': 'str',
    'y': 5
}
const b: MyType = {};
b['x'] = 'str2';
b['y'] = 6
我得到一个错误(y是一个数字,但需要一个字符串),根据索引签名,这是有意义的。 但当我写这篇文章时:

const a: MyType = {
    'x': 'str',
    'y': 5
}
const b: MyType = {};
b['x'] = 'str2';
b['y'] = 6
它很好用。
这两者的区别是什么?这是否可行?

请参阅;这里的问题并不完全重复,但答案是相关的。这可能是一个规范性的问题,尽管没有任何人能够明确地说读/写两个相交成员中类型冲突的属性是否“应该”起作用。我觉得这是ts编译器的一个问题。我知道MyType不应该这样写,这个问题更多的是关于ts编译器的。对于VarA,它的行为就像索引签名适用于所有东西一样——你会得到一个矛盾——因此是一个错误。对于var b,它的行为类似于索引签名应用于除x参数和y参数之外的所有对象。所以ts是可以接受的,并且不会出现错误。(ts编译器错误)听起来像是ts编译器错误-或者我遗漏了什么。你看过上面链接的ms/ts#37809吗?哦,是的,我遗漏了链接是的,谢谢你的帮助-这只是ts固有的不一致行为