热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ts如何声明类的泛型

我有如下一个类:

我有如下一个类:



1
2
3
4
5
6
7
8
9
10
11
12
class Test {

  value: number | number[];



  constructor(value: number | number[]) {

    this.value = value;

  }



  get computedValue() {

    if (typeof this.value === 'number') return this.value * 2;

    if (Array.isArray(this.value)) return this.value.map(i => i * 2);

  }

}

计算属性

1
computedValue

的类型是由实例对象时传入参数决定的.



1
2
3
4
const test = new Test(1)



const value:number = test.computedValue

// 报错->'number[]' is not assignable to type 'number'.

这种应该是用泛型吧.但我对泛型不熟,再一个取值函数似乎无法声明类型.

我尝试了声明一个interface,然后类再实现这个interface的方式也不行.

进阶:

如果

1
constructor

接受一个配置对象,value是其中的一个属性,那又要如何声明呢?

望大佬们不啬赐教~~

update

查阅文档后更改如下,但依然报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
type TestProps = number | number[]



class Test {

  constructor(value: T) {

    this.value = value;

  }



  value: T;



  get computedValue(): T {

    if (typeof this.value === 'number') {

      return this.value * 2;

// error->Type 'number' is not assignable to type 'T'.

    }

    if (Array.isArray(this.value)) {

      return this.value.map(i => i * 2);

// error->Type 'number[]' is not assignable to type 'T'.

    }

  }

}



const test = new Test(1);

const test2 = new Test([1, 2]);



const num1: number = test.computedValue;

const num2: number[] = test2.computedValue;



   



推荐阅读
author-avatar
-崔思聪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有