type Action = 'create' | 'update' | 'delete';
type Entity = 'user' | 'post';
type LogMessage = `${Action}_${Entity}`;
function logAction(action: LogMessage) {
console.log(`Logging action: ${action}`);
}
logAction('create_user'); // valid
logAction('update_post'); // valid
// logAction('read_user'); // error
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const person = { name: 'Alice', age: 30 };
const name = getProperty(person, 'name'); // valid
const age = getProperty(person, 'age'); // valid
// const gender = getProperty(person, 'gender'); // error