我有一个带有字符串索引签名的类型:
declare var result: {
[key: string]: number;
};
将接口分配给该类型失败:
interface IData {
a: number;
b: number;
}
declare var data: IData;
result = data; // Error: Type 'IData' is not assignable to type '{ [key: string]: number; }'. Index signature for type 'string' is missing in type 'IData'.
但是分配类型别名会成功:
type TData = {
a: number;
b: number;
};
declare var data1: TData;
result = data1; // [SUCCEED] why?
我期望接口和类型别名在分配给具有索引签名的类型时具有相同的行为。为什么他们的行为实际上不同?
TS 游乐场链接 https://www.typescriptlang.org/play/index.html#code/CYUwxgNghgTiAEA3W84GcCuEAuAueA3gFDzwDaA1iAJ75rYwCWAdgOYC6+zGAtgEYgYAbiIBfEURbZBAMyhgEASQAiUbFEIl4ULrwHCtfXf0EjRRUJFgJkMeMDU74KxyPRZs8ALz3X8APT+5ABiAIKKADIAosrs2mBgAPYwwCys8NiJ8ADMAHQAjPm5ACzwoWhojKzMPCDMngDCiTwADmqMfIwQjNjU8GgAFolYwPAC8HJdIMBERL0tCAAqquremqRO3CYGpEbwW-pmIpbQcEgoDur5+MuuRO44a5dQ+UIBQWQAygCqDQ1RMTiAHcBtQAPxAA
多余的,订阅这个问题,并且规范已经过时了
https://github.com/microsoft/TypeScript/issues/15300 https://github.com/microsoft/TypeScript/issues/15300
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)