TypeScript泛型及其一些写法

news/2024/5/20 1:18:03 标签: typescript, ts, vue

Vue3拥抱Typescript之泛型

typescript">// 平常写ts可能会这样注解类型,但是这样有些麻烦,能不能简洁点呢
//function joi(first: string | number,second: string | number){
//	return first + second
//}
// JJ是泛型,在最简单的泛型用法中可以类比形参理解,所以它可以是任意值
// 但一般用T表示
function joi<JJ>(first: JJ,second: JJ){
	return first + second
}
// JJ在这里是number
joi<number>(1,2)
// JJ在这里是string
joi<string>('1','2')

typescript">// 定义多个泛型
function joi<JJ,PP>(first: JJ,second: PP){
	return first + second
}
joi<string,number>('1',2)

typescript">// 类泛型
class SSS<T>{
	// g要求是T类型数组
	constructor (private g: T[]){} // GGG
	// GGG处的写法效果如下注释
	// private g
	// constructor (g: T[]){
	//		this.g = g
	//}
	getG(index:number):T{ //返回值需是T类型
		return this.g[index]
	}
}
// T为String
const s = new SSS<string>(['1','2','3'])
console.log(s.getG(0)) // ‘1’

typescript">// 泛型继承
interface S{
	name: string;
}
class SSS<T extends S>{ //泛型继承后必须有name值{ name: 'x'}格式
	// 请求一个【{name: string},{name: string}】格式数组
	constructor (private g: T[]){} 
	getG(index:number):string{
		return this.g[index].name
	}
}
// 因为使用了继承所以不用再指定类型
const s = new SSS([
	{name: '1'},
	{name: '2'},
	{name: '3'}
])
console.log(s.getG(0)) // ‘1’

typescript">// 泛型约束
class SSS<T extends number | string>{// T被约束为number | string
	constructor (private g: T[]){
		
	}
	getG(index:number):T{
		return this.g[index]
	}
}
const s = new SSS<string>(['1','2','3'])
console.log(s.getG(0)) // ‘1’

原文链接:https://blog.csdn.net/kyyius/article/details/109923694


http://www.niftyadmin.cn/n/1143440.html

相关文章

Vue3警告[Vue warn]: Avoid app logic that relies on enumerating keys on a component instance.

在Vue3中使用watch监听useRoute()的时候&#xff0c;控制台报出警告&#xff1a; [Vue warn]: Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead. watch&#xff08;rout…

JWT---Token身份令牌验证

什么是Token&#xff1f; 在计算机身份认证中是令牌&#xff08;临时&#xff09;的意思&#xff0c;在词法分析中是标记的意思。一般我们所说的的token大多是指用于身份验证的token 为什么使用token? 我们需要每次都知道当前请求的人是谁&#xff0c;但是又不想每次都让他提交…

Vue3中axios如何使用路由(useRouter)以及自定义hooks中使用useRouter报错问题(已踩坑)

随着vue3的更新,vue-router也更新到了4.x useRouter 相当于vue2的this.$router全局的路由实例&#xff0c;是router构造方法的实例 useRoute 相当于vue2的this.$route表示当前激活的路由的状态信息&#xff0c;包含了当前 URL 解析得到的信息&#xff0c;还有 URL 匹配到的 r…

React生命周期钩子函数(图示)

&#xff08;旧&#xff09; &#xff08;新&#xff09; 1.React16新的生命周期弃用了componentWillMount、componentWillReceivePorps&#xff0c;componentWillUpdate 2.新增了getDerivedStateFromProps、getSnapshotBeforeUpdate来代替弃用的三个钩子函数&#xff08;co…

解决React中多级路径刷新页面样式丢失问题

1.public/index.html 中引入样式时不写 ./ 而是写 / &#xff08;常用&#xff09; 2.public/index.html 中引入样式时不写 ./ 而是写 %PUBLIC_URL% &#xff08;常用&#xff09; 3.使用HashRouter

Vue3警告:[Vue warn]: Extraneous non-emits event listeners (changeParentProps) were passed to component

在Vue3中组件通信中&#xff08;子传父&#xff09;报出如下警告&#xff1a; [Vue warn]: Extraneous non-emits event listeners (changeParentProps) were passed to component but could not be automatically inherited because component renders fragment or text root…

手撕Promise和Async await原理

Promise原理&#xff1a; const PENDING pending; const FULFILLED fulfilled; const REJECTED rejected;class MyPromise { status PENDING; // 状态一经改变就不可变value null;reason null;successCallback null;failCallback null;constructor(executor) {this.re…