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)
}

İlgili makaleler