如何用 TypeScript 提高 JS 工程的健壮性
发布网友
发布时间:2022-04-29 21:31
我来回答
共2个回答
热心网友
时间:2022-04-19 05:54
1. Typed Tuple
虽然 JavaScript 里一直没有正宗的 Tuple 类型,但是在 JavaScript 中使用 Tuple 一直都是很常见的事情,可以基于数组也可以基于对象,有了解构赋值以后用数组还是对象的代码量几乎完全相同。
在 TypeScript ,如果我们需要一个具有静态类型的 Tuple,一种方式是定义一个 interface 然后使用对象,但是这样看起来比较麻烦。
另一种方式就是直接使用 TypeScript 提供的 Tuple 类型:
let error: [number, string] = [123, 'Some Message'];
在 TypeScript 的类型标注中,当我们把类型写在方括号之前,就是 Typed Array,当类型写在方括号之中,就是 Typed Tuple 了。接着我们就可以使用类型安全的方式解构或者手动取值:
// Both correctly typed
let [code, message] = error; // code is number and message is string
let anotherCode = error[0]; // anotherCode is number
let anotherMessage = error[1]; // anotherMessage is string
2. String Literal Type
当我们需要使用静态可枚举的内容时,最正统的方式当然是使用 Enum。不过对于一些需要和已有 JavaScript 类库交互时,必须得使用 String 类型,这时候往往会难以进行静态检查(例如拼写错误)。
这时候,可以使用 TypeScript 提供的 String Literal Type:
class Socket {
on (event: 'open' | 'message' | 'error' | 'close', cb) {
// ...
}
}
let mySock = new Socket();
socket.on('message', () => {});
这样,如果传入的 String 不在预设范围内,就会报错,从而实现静态检查效果。
3. Void
对于所有没有返回值的函数或者方法,都应该声明为 Void 类型,而不是留空,后者为 Any 类型。
function log(message: string): void {
// ...
}
4. Implements Class
对于面向对象编程,组合优于继承,但是对于组合,我们往往需要先定义一个接口类型,然后再定义一个这个接口的实现类型,十分繁琐。
在 TypeScript 中,我们可以直接 Implements(而非 extends)一个(或多个)类:
class Base1 {
method1 () {}
}
class Base2 {
method2 () {}
}
class MyClass implements Base1, Base2 {
constructor (private base1: Base1, private base2: Base2) {}
method1 () { return this.base1.method1(); }
method2 () { return this.base2.method2(); }
}
这样,我们就不要像 Java 那样先定义一个 SomeInterface,再定义一个 SomeImpl,再把自己的 Class 实现 Interface,再把 SomeImpl 注进来那么麻烦了。
热心网友
时间:2022-04-19 07:12
没有rando函数。只有rand和randn
1.rand()
生成(0,1)区间上均匀分布的随机变量。基本语法:
rand([M,N,P ...])
生成排列成M*N*P... *向量的随机数。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:
rand(5,1) %生成5个随机数排列的列向量,一般用这种格式
rand(5) %生成5行5列的随机数矩阵
rand([5,4]) %生成一个5行4列的随机数矩阵
生成的随机数大致的分布。
x=rand(100000,1);
hist(x,30);
由此可以看到生成的随机数很符合均匀分布。(视频教程会略提及hist()函数的作用)
2.randn()
生成服从标准正态分布(均值为0,方差为1)的随机数。基本语法和rand()类似。
randn([M,N,P ...])
生成排列成M*N*P... *向量的随机数。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:
randn(5,1) %生成5个随机数排列的列向量,一般用这种格式
randn(5) %生成5行5列的随机数矩阵
randn([5,4]) %生成一个5行4列的随机数矩阵
3、matlab中random函数——通用函数,求各分布的随机数据,其用法:
y = random('norm',A1,A2,A3,m,n)
式中:A1,A2,A3为分布的参数,m,n用来指定随机数的行和列,name的取值有相关的表格来参照。
例:产生一个3行4列均值为2、标准差为0.3的正态分布随机数:
>>y =random('norm',2,0.3,3,4)
y =
2.1613 2.2587 1.8699 2.8308
2.5502 2.0956 2.1028 1.5950
1.3223 1.6077 3.0735 2.9105