typescript - jsdoc ile arayüzler nasıl kullanılır?
/**
* @param {Object[]} items - Payload should be an array or objects which includes name property
* @return {String[]} Returns names of all objects in that array
*
*/
const namesOfItems = (items) => {
return items.map((item) => item.name)
}
Benim şöyle bir kodum var. Bu, items adında bir parametre kabul ediyor. Items, user, car, company, country gibi herhangi bir nesne dizisi olabilir, eğer o nesnenin içinde bir name özelliği varsa. Şu anda bir projede jsdoc kullanıyorum ve @param dekoratörünü @param {Object[]} items olarak ayarladım, ancak bu deklarasyon bu nesnenin içinde bir name özelliği olup olmadığını kontrol etmiyor. TypeScript'te bunu yönetmek için interface'ler vardı ama merak ediyorum, @param'ımı nasıl ayarlayıp sadece name özelliğine sahip bir nesneyi kabul ettiğini gösterebilirim.
Aşağıdaki gibi bir çözüm arıyorum:
@param {Array<AnObjectWhichHasName>}Cevap #1
Typescript, JSDoc üzerinden arayüzleri tanımlamayı desteklemiyor. Ancak @param içinde bir nesne tipi kullanabilirsiniz:
/**
* @param {{name: string}[]} items
*/
const namesOfItems = (items) => {
return items.map((item) => item.name)
}
Veya nesne türünü @typedef ile tanımlayın ve sonra kullanın:
/**
* @typedef {{name: string}} AnObjectWhichHasName
*/
/**
* @param {AnObjectWhichHasName[]} items
*/
const namesOfItems = (items) => {
return items.map((item) => item.name)
}
Veya bir nesne türü tanımlamak için bu alternatif sözdizimini kullanın:
/**
* @typedef {Object} AnObjectWhichHasName
* @property {string} AnObjectWhichHasName.name
*/
/**
* @param {AnObjectWhichHasName[]} items
*/
const namesOfItems = (items) => {
return items.map((item) => item.name)
}
