簡體   English   中英

使用打字稿中的符號來鍵入通用類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM