我正在尝试做这样的事情:
function attachUUID<T>(o:T) {
o[Symbol('id')]=v1();
}
T
泛型类型是类定义或某些已定义的Typescript type
。 VSCode错误是:
[ts] Element implicitly has an 'any' type because type '{}' has no index signature
答案 0 :(得分:2)
您的代码不保证您使用的符号命名属性已在T
上声明。您可以将T
约束为声明属性的类型:
const symbolId = Symbol('id');
function attachUUID<T extends { [symbolId]: string }>(o: T) {
o[symbolId]=v1();
}
或者强制转换为any
:
function attachUUID<T>(o: T) {
(<any>o)[symbolId]=v1();
}
答案 1 :(得分:1)
...或者如果您要将符号分配给任何对象:
const idSym = Symbol('id');
function attachUUID<T>(o:T) {
type withUUID = T & { [idSym]: string };
(o as withUUID)[idSym] = v1();
return o as withUUID;
}
这样,您以后就可以获取类型安全性:
const el = attachUUID({ a: 1 });
console.log(el.a, el[idSym]);