typescript - 如何在 TypeScript 中定义特定的数组类型数组?
问题描述
我正在学习 TypeScript 中的高级类型,我想知道是否有可能以某种方式定义这种类型。
想法是有一个类 A 有一个构造函数,该构造函数应该接受一个有限数组或对象数组或任何其他合适的数据类型,这样所有内部数据结构将只接受两个项目,这样第一个项目可以在何时定义调用构造函数,另一个将被修复?如果未定义类型,它应该接受所有原始类型,但第二个仍然是固定的。
例如这样的事情:
interface Inner<T> {
first: T,
second: number
}
class A<T> {
constructor(arrayofxs: Array<Inner<T>>) {
// Do something
}
}
然后像这样使用它。当没有具体设置类型时,第一个参数将接受所有原语或对象
new A([['asd', 1], [123, 2], [{a: 1, b:123}, 3], ...])
然后当它被设置时,它只会接受设置类型作为第一个:
new A<string>([['asd', 1], ['123', 2], ['qwerty', 3], ...])
内部数组不必是特定的数组。
如果我将内部结构定义为
type Inner = Array<T|number>
这不会设置参数的顺序,也不会限制参数的数量。这就是为什么我认为数组不适合作为内部结构,但我可能应该使用 object.
如果我将内部类型定义如下:
type Inner<T> = [T, number]
那会起作用,但是没有指定 T 的实例化会将 T 设置为第一个数组元素的类型。第一种类型实际上也发生了同样的情况。类型 T 似乎设置为第一个元素的类型。
new A([['asd', 1], [123, 2], ... ])
第二个内部数组[123, 2]
会显示错误
类型“数字”不可分配给类型“字符串”.ts(2322)
我可以这样使用它
new A<any>([['asd', 1], [123, 2], ...])
但是使用any
是一种非常糟糕的做法,我不想使用它。
我怎么可能实现这种打字?
解决方案
推荐阅读
- unit-testing - 从基于 .NET 4.7.1 的 C# 测试项目中定位 .NET Core 2.0.1 Web 项目
- python - scipy UnivariateSpline 在绘图时总是返回线性样条曲线
- javascript - JS 条件正则表达式,删除两个分隔符之间的字符串的不同部分
- schema.org - 带有 JSON-LD 和 Schema.org 词汇的简历(工作历史和组织)格式
- c++ - 从 Boost.Spirit 的固定列表中解析选择
- ruby-on-rails - 如何在rails中的路由之前从url中去除空格
- apache-spark - 在 mapreduce 上执行 hive 查询与在 spark 上执行 hive 之间的区别
- java - Android + Appium:在 ListView 内滚动到特定位置并单击它
- ruby-on-rails - Rails 对 Eventbrite 的 POST 请求不起作用
- windows - CreateFile 与 FILE_FLAG_NO_BUFFERING 但不是 FILE_FLAG_WRITE_THROUGH