如何为嵌套列表编写接口?

时间:2019-04-13 10:56:46

标签: typescript types interface

我正在尝试在Typescript中为矩阵编写接口, 我无法找到一种将类型Array<Array<number>>描述为接口的方法。

    const matrix:Array<Array<number>> = [
        [0,0,0],
        [1,1,1],
        [0,1,0],
    ]

相反,我想要类似的东西

//dosen't work
    interface Imatrix {
    [index:number]:Array<number>
     }

然后可以在与Imatrix一起使用的函数中使用

function draw(matrix:Imatrix){
     matrix.forEach(()=>{
     //some code
      })
 }
draw(matrix)

当我这样做时,我收到错误消息“ Imatrix”类型不存在属性“ forEach”。ts(2339)

1 个答案:

答案 0 :(得分:0)

如果您确实要使用界面,可以这样做:

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1\helpers\packaging_tool.py", line 170, in main
    do_pyvenv(path, system_site_packages)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1\helpers\packaging_tool.py", line 88, in do_pyvenv
    venv.create(path, system_site_packages=system_site_packages)
  File "C:\Anaconda3\lib\venv\__init__.py", line 363, in create
    builder.create(env_dir)
  File "C:\Anaconda3\lib\venv\__init__.py", line 66, in create
    self.setup_python(context)
  File "C:\Anaconda3\lib\venv\__init__.py", line 204, in setup_python
    copier(context.executable, path)
  File "C:\Anaconda3\lib\venv\__init__.py", line 192, in symlink_or_copy
    shutil.copyfile(src, dst)
  File "C:\Anaconda3\lib\shutil.py", line 120, in copyfile
    with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Anaconda3\\lib\\venv\\scripts\\nt\\python.exe'

(也许您想知道interface Row<T> extends T[] { [cell: number]: T } interface Matrix<T> extends Row<T>[] { [cell: number]: Row<T> } T[]的同义词。)

但是TypeScript使用结构匹配,因此 type interface 之间没有区别,它们只是同一事物的不同语法。例如,这就是为什么我们不在接口名称前使用Array<T>前缀。我上面编写的代码与此相同:

I

如果要向type Row<T> = T[]; type Matrix<T> = Array<T[]>; 添加自己的方法,正确的OOP方法将是为其创建一个类,该类包含嵌套数组作为属性:

Matrix