Type Aliases in Kotlin Explained
Type aliases in Kotlin provide a way to create alternative names for existing types, making your code more readable and maintainable.
Basic Usage
Simple Type Aliases
typealias Name = String
typealias Age = Int
typealias UserId = String
data class User(
val id: UserId,
val name: Name,
val age: Age
)
Function Type Aliases
typealias ClickHandler = (View) -> Unit
typealias StringFilter = (String) -> Boolean
typealias DataCallback = (Result<Data>) -> Unit
class Button {
private var onClick: ClickHandler? = null
fun setOnClickListener(listener: ClickHandler) {
onClick = listener
}
}
Advanced Usage
Generic Type Aliases
typealias StringMap = Map<String, String>
typealias NumberList = List<Number>
typealias ResultCallback<T> = (Result<T>) -> Unit
fun processData(data: StringMap, callback: ResultCallback<String>) {
// Implementation
}
Complex Type Aliases
typealias UserMap = Map<UserId, User>
typealias UserList = List<User>
typealias UserCallback = (User) -> Unit
typealias UserFilter = (User) -> Boolean
class UserRepository {
private val users: UserMap = mutableMapOf()
fun findUsers(filter: UserFilter): UserList {
return users.values.filter(filter)
}
}
Best Practices
- Use descriptive names for type aliases
- Keep aliases close to their usage
- Use aliases for complex types
- Consider package-level aliases for common types
- Document complex type aliases
Common Patterns
API Response Types
typealias ApiResponse<T> = Result<T>
typealias ApiCallback<T> = (ApiResponse<T>) -> Unit
typealias ApiError = String
interface ApiClient {
fun <T> get(url: String, callback: ApiCallback<T>)
fun <T> post(url: String, data: T, callback: ApiCallback<T>)
}
Database Types
typealias DbId = Long
typealias DbTimestamp = Long
typealias DbQuery = String
typealias DbResult<T> = Result<T>
class Database {
fun <T> query(query: DbQuery): DbResult<T> {
// Implementation
}
}
Use Cases
UI Components
typealias ViewId = Int
typealias Color = Int
typealias Dimension = Float
typealias ResourceId = Int
class CustomView {
fun setBackgroundColor(@ColorRes color: Color) {
// Implementation
}
}
Network Types
typealias HttpMethod = String
typealias HttpHeaders = Map<String, String>
typealias HttpBody = String
typealias HttpStatusCode = Int
class HttpClient {
fun request(
method: HttpMethod,
headers: HttpHeaders,
body: HttpBody?
): HttpStatusCode {
// Implementation
}
}
Performance Considerations
- Type aliases are resolved at compile time
- No runtime overhead
- Helps with code organization
- Improves code readability
Conclusion
Type aliases are a powerful feature in Kotlin that helps make your code more readable and maintainable. Use them to simplify complex types and create more meaningful names for your types.