TypeScript + propTypes
npm install --save prop-typesimport PropTypes from 'prop-types';import React from 'react';
import { PropTypes } from "prop-types";
const Person = (props) => {
return (
<>
.........
</>
)
};
Person.propTypes = {
// key er navnet til prop-elementet
// value er data typen
// f.eks.: keyName: dataType
name: PropTypes.string,
}
export default Person;Person.propTypes = {
optionalArray: PropTypes.array,
optionalBigInt: PropTypes.bigint,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
}
.isRequiredPerson.propTypes = {
requiredString: PropTypes.string.isRequired,
}
Person.propTypes = {
optionalNode: PropTypes.node,
optionalElement: PropTypes.element,
optionalElementType: PropTypes.elementType,
optionalEnum: PropTypes.oneOf(['News', 'Photos']),
optionalUnion: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
PropTypes.instanceOf(Message)
]),
}
npx create-react-app my-app --template typescriptnpm install --save typescript @types/node @types/react @types/react-dom @types/jestconst name: string = 'Ola Nordman';
const age: number = 19;
const over18: boolean: true;const name: string = 'Ola Nordman';
const age: number = 19;
const over18: boolean: true;
const isPersonOver18 = (): string => {...};
const isPersonOver18 = (ageProp: number): string => {...};const person: {
name: string;
age: number;
over18: boolean;
} = {
name: 'Ola Nordmann',
age: 19,
over18: true,
};const person = {
name: 'Ola Nordmann',
age: 19,
over18: true,
};const person: {
name: string;
age: number;
over18: boolean;
} = {
name: 'Ola Nordmann',
age: 19,
over18: true,
};const person: PersonType = {
name: 'Ola Nordmann',
age: 19,
over18: true,
};type PersonType {
name: string;
age: number;
over18: boolean;
};
const person: PersonType = {
name: 'Ola Nordmann',
age: 19,
over18: true,
};const person: {
name: string;
age: number;
over18: boolean;
} = {
name: 'Ola Nordmann',
age: 19,
over18: true,
};const person: PersonType = {
name: 'Ola Nordmann',
age: 19,
over18: true,
};interface PersonType {
name: string;
age: number;
over18: boolean;
};
const person: PersonType = {
name: 'Ola Nordmann',
age: 19,
over18: true,
};Type er det samme som interface, men...
Type aliases and interfaces are very similar, and in many cases you can choose between them freely. Almost all features of an interface are available in type, the key distinction is that a type cannot be re-opened to add new properties vs an interface which is always extendable.
interface PersonType {
name: string;
age: number;
over18: boolean;
};interface StudentType extends PersonType {
studentNumber: number;
faculty: 'front-end', 'back-end', 'Markedsføring';
};interface TeacherType extends PersonType {
educationFromSchool: string;
teacherForSubject: string;
};interface StudentType {
name: string;
age: number;
over18: boolean;
studentNumber: number;
faculty: 'front-end', 'back-end', 'Markedsføring';
};Det samme som
readonlynever<T>
export interface SomeTypeDefinitions {
readonly id: number;
name: never;
optionalStringAttribute?: string
human: TeacherType | StudentType;
returnStringHelloWorldFunction: () => string;
consoleLogOutHelloWorldFunction: () => void;
personIsOver18: (age: number) => void;
};
import React, { useState } from 'react';
export interface PersonType {
name: string;
age: number;
over18?: boolean;
}
const Person = (props: PersonType) => {
const [newName, setNewName] = useState<string>('Ola Nordmann');
return (
<>
.........
</>
)
};
export default Person;Neste gang: Hooks: useContext( )