type ListFormatOptions = { type ? : 'conjunction' | 'disjunction' | 'unit' ; style ? : 'long' | 'short' | 'narrow' ; localeMatcher ? : 'lookup' | 'best fit' ; } ; declare namespace Intl { class ListFormat { constructor ( locale , options ) ; public format : ( items : Array < string > ) => string ; } } type ListifyOptions < ItemType > = { type ? : ListFormatOptions [ 'type' ] ; style ? : ListFormatOptions [ 'style' ] ; stringify ? : ( item : ItemType ) => string ; } ; function listify < ItemType > ( array , { type = 'conjunction' , style = 'long' , stringify = ( thing ) => thing . toString ( ) , } = { } ) { const stringified = array . map ( item => stringify ( item ) ) ; const formatter = new Intl . ListFormat ( 'en' , { style , type } ) ; return formatter . format ( stringified ) ; } export { listify } ;