const a: number = 1;
console.log('a', a); // 1
const b: string = 'Hello';
console.log('b', b);// Hello
const c: boolean = true;
console.log('c', c); // true
type NumOrStr = number | string;
场景: 一个函数的参数变量支持传入单个数据和多条数据,我们可以通过联合类型来支持这样场景
let a : number | string = 0;
console.log('a-1', a);// 0
a = 'hello';
console.log('a-2', a);// hello
const getValue = <T, > (value:T):T => value;
const b = getValue('hello');
console.log('b', b);
const b1 = getValue(5);
console.log('b1', b1);
interface Props {
name?: string;
age?: number;
}
const getValue = <T extends Props>(value: T): T => value;
const a = getValue({ name: 'HYU' });
const a1 = getValue({ name: 'HYU', age: 18 });
const a2 = getValue({ age: 20 });
console.log('a', a); // {name: 'HYU'}
console.log('a1', a1); // {name: 'HYU', age: 18}
console.log('a2', a2); // {age: 20}
interface Props {
name?: string;
age?: number;
}
function getValue<T extends Props> (value: T) {
return value;
}
const a = getValue({ name: 'HYU' });
const a1 = getValue({ name: 'HYU', age: 18 });
const a2 = getValue({ age: 20 });
console.log('a', a); // {name: 'HYU'}
console.log('a1', a1); // {name: 'HYU', age: 18}
console.log('a2', a2); // {age: 20}
function getValue<T> (value: T):T {
return value;
}
const a = getValue({ name: 'HYU' });
const a1 = getValue({ name: 'HYU', age: 18 });
const a2 = getValue({ age: 20 });
console.log('a', a); // {name: 'HYU'}
console.log('a1', a1); // {name: 'HYU', age: 18}
console.log('a2', a2); // {age: 20}
泛型变量可以是任意字母,常见的泛型变量定义有:
通过交叉运算符 & 对多个类型进行交叉合并,新类型拥有所有类型的成员。
interface Point {
name: string;
width: number;
height: number;
c: number;
}
interface Surface {
size: number
c: string;
}
Point & Surface =>
{
name: string;
width: number;
height: number;
size: number;
c: never;
}
const a : (Point & Surface) = {
name: 'THIS',
width: 200,
height: 100,
size: 2000,
c: [1, 3, 4]
};
console.log('a', a);
type Keys = 'name';
type Sizes = 'width' | 'height'
type Point = {
[k in Keys]: string
} & {
[k in Sizes]: number
} & { size: number }
const a: Point = {
name: 'THIS',
width: 200,
height: 100,
size: 2000,
};
console.log('a', a);