我需要什么类型的断言来编译?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
Run Code Online (Sandbox Code Playgroud)
错误:
Incompatible types in array literal expression
Run Code Online (Sandbox Code Playgroud)
小智 16
这将有效:
class Foo {}
class Bar {}
var f: any[][] = [
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
Run Code Online (Sandbox Code Playgroud)
这表示你有一个二维数组,其值可以是任何值(Foo,Bar,其他数组等).您还可以为嵌套数组使用类型断言:
class Foo {}
class Bar {}
var f = [
[<any>Foo, [1, 2, 3]],
[<any>Bar, [7, 8, 9]],
];
Run Code Online (Sandbox Code Playgroud)
内部数组中存在单个any会强制编译器将其类型推断为任何[].
Eli*_*lay 10
看起来打字稿现在确实有异构数组。因此,由于当我寻找这个问题时首先出现了这个问题,并且因为否则很难找到它,所以现在可以如何编写此代码:
class Foo {}
class Bar {}
var f: [Foo|Bar, number[]][] =
[[new Foo(), [1, 2, 3]],
[new Bar(), [7, 8, 9]]];
Run Code Online (Sandbox Code Playgroud)
(现在,如果这沿着类型语法模仿表达式的道路发展,那么该类型也会获得[Foo|Bar, [...number]][]...的语法)
它甚至可以与函数参数一起使用,所以这个类型检查很好:
function foo([obj,nums]: [Foo|Bar, number[]]) {
for (let i of nums) console.log(`i = ${i}`);
}
f.forEach(foo);
Run Code Online (Sandbox Code Playgroud)
以及极端版本:
f.forEach(([obj,nums]: [Foo|Bar, number[]]) => {
for (let i of nums) console.log(`i = ${i}`); });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3680 次 |
| 最近记录: |