interfacePerson { name:string; age:number;}// `keyof Person` here creates a union type of "name" and "age", other strings will not be allowedfunctionprintPersonProperty(person:Person, property:keyofPerson) {console.log(`${person[property]}`);}let person = { name:"Max", age:27};printPersonProperty(person,"age"); // Printing person property name: "Max"
4.2 keyof with index signatures
typeStringMap= { [key:string]:unknown};// `keyof StringMap` resolves to `string` herefunctioncreateStringPair(property:keyofStringMap, value:string):StringMap {return { [property]: value };}console.log(createStringPair("Lionel","Hi"));
5. How to Define and Use Generic Components in React
— 5.1 Function
interfaceMyComponentProps<T> { data:T;// Add additional props specific to your component}functionMyComponent<T>({ data }:MyComponentProps<T>) {return ( <div> {/* JSX content */}</div> );}
— 5.2 Arrow Function
Để tránh sự mơ hồ giữa các tham số kiểu chung và một jsxthành phần, bạn thêm dấu phẩy theo sau tham số kiểu để phân biệt nó với JSX.Element.
interfaceMyComponentProps<T> { data:T;}// notice the trailing comma after <TconstMyComponent= <T,>({ data }:MyComponentProps<T>) => {return ( <div> {/* JSX content */}</div> )};exportdefault MyComponent;