[英]Keying a generic type using a Symbol in Typescript?
我正在嘗試做這樣的事情:
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
您的代碼不保證您正在使用的以符號命名的屬性已在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();
}
...或者如果您要將符號分配給任何對象:
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]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.