- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个字符串数组,例如:
const a = ['foo', ['aa'], [['zzz',['bar']]]];
export const acceptsArray = (v: Array<any>) : string => {
returns flattenDeep(v).join(' ');
};
Array<any>
如何表示嵌套的字符串数组?
最佳答案
简答
新功能 仅适用于 Typescript 3.7+
type A = 'foo' | 'aa' | 'zzz' | 'bar' | A[]
const a:A = ['foo', ['aa'], [['zzz',['bar']]]];
export const acceptsArray = (v: Array<A>) : string => {
returns flattenDeep(v).join(' ');
};
// When autor say this:
const a = ['foo', ['aa'], [['zzz',['bar']]]];
// Should he mean this:
type A0 = 'foo' | 'aa' | 'zzz' | 'bar' | A[]
// or this:
type A1 = string | string[] | (string | string[])[][]
// Both types 'A0' and 'A1' are valid types for variable 'a',
// but type 'A1' is strictier.
NOTE: I write bellow answer when TS 3.5 was last version. The important update necessary is mentioned up-above. Bellow answer still valid. I'll refactory the answer to make it shorter when possible.
type A = string | string[] | (string | string[])[][]
const a:A = ['foo', ['aa'], [ ['zzz',['bar'] ] ] ];
export const acceptsArray = (v: Array<A>) : string => {
returns flattenDeep(v).join(' ');
};
type A = Array<string> // type definition
const a: A = ['a','b','c'] //instance
type A = Array<string>
type B = Array<A>
// Ok !
const b0: B = [['a','b','c'],['foobar'],['1','2','3','4','5']] //ok
const b1: B = [['1','2','3']] //ok
//Attention !!!
const b2: B = ['1','2','3'] //error! Array<string> is not equal to Array<Array<string>>
const b3: B = [[1,2,3]] // error! Array<Array<number>> is not equal to Array<Array<string>>
B
上面可以写成这样:
type B = Array<Array<string>>
.在 typescript 中,如果你想要一个“字符串数组数组”,你也可以这样表示:
type X0 = Array<Array<string>>
type X1 = string[][] // short form!
type Y0 = Array<Array<Array<string>>>
type Y1 = string[][][] // short form!
// this also works!!
type Y2 = (string | number)[][][]
// Given this types...
type A = string
type B = Array<string>
type Both = A | B
// and this instances...
const a:A = 'foo'
const b:B = ['foo']
// so...
const r0: Array<A> = [a,a] //ok
const r1: Array<B> = [a,a] //error: string is not of type Array<string>
const r2: Array<B> = [b,b] //ok
const r3: Array<Both> = [a,b] //ok
T
的数组怎么办? ,其中
T
是
任何 具体类型。
// Some specific types
type SPECIFIC_TYPE_01 = string
type SPECIFIC_TYPE_02 = number
type SPECIFIC_TYPE_03 = //...etc
// A generic array of any specific type
type GenericArray<T> = Array<T>
// use:
const a: GenericArray<SPECIFIC_TYPE_01> = ['a','b','c'] //ok
const b: GenericArray<SPECIFIC_TYPE_02> = [1,2,3] //ok
Note: Obviously instead of using these long names you may use just
Array<string>
,Array<number>
, etc. I'm just beeing didactic to show how generics works with arrays.
// Given...
type NestedArray0<T> = T[] //same as Array<T>
type NestedArray1<T> = T[][] //same as Array<Array<T>>
type NestedArray2<T> = T[][][] // same as Array<Array<Array<T>>>
type NestedArray3<T> = T[][][][] // etc you get the point...
// So you can do things like...
const a0: NestedArray0<number> = [1,2,3] //ok
const a1: NestedArray1<number> = [[1,2,3]] //ok
const a2: NestedArray2<number> = [[[1,2,3]]] //ok
const a3: NestedArray3<number> = [[[[1,2,3]]]] //ok
// The type of your examples (based in what you informed) is...
type MyType =
| string // 'foo'
| NestedArray0<string> // ['aa']
| NestedArray1<string | string[]> // [['zzz',['bar']]]
const a: Array<MyType> = ['foo', ['aa'], [['zzz',['bar']]] ]; //ok
// so you can do
export const acceptsArray = (v: Array<MyType>) : string => {
returns flattenDeep(v).join(' ');
};
关于tsc - 如何用 typescript 表示嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53423733/
起初:我知道命令行中tsc和tsc -w的区别。这不是问题,而是一种特殊情况: 在 VS Code 的 tsconfig 中,我通过设置 "watch":true 启用了观察器。这是绝对想要的。但是现
我正在尝试为 file.ts 运行命令 tsc 以将此代码编译为 js 但我发现以下错误: tsc : File C:\Program Files\nodejs\tsc.ps1 cannot be l
我正在尝试将我的 TypeScript 项目转换为 JavaScript,但是,似乎有些不对劲。我将项目配置为通过 "module":"ES6" 解析为 ES6 模块(又名 ESM)设置,但不能解决问
我有 typescript ,并使用别名。 这是tsconfig.json的一部分 "compilerOptions": { "baseUrl": "./src", ... }, 通过设置基
我在一个项目上使用 typescript ,所有文件都可以用 tsc 正常编译,我正在使用 watch 标志来查找更改。我遇到的问题是,当我创建一个新文件时,tsc 没有获取新文件,我必须退出 tsc
当我使用 tsc --declaration 或 tsconfig.json 声明为 true 生成我的定义文件“.d.ts”时,生成的文件不包括 声明模块“我的模块”{... 这对“vscode”来
我有一个名为 test.ts 的简单 hello world 文件,其中包含以下内容: export class Hello { constructor() { console.log("
我刚刚将 TypeScript 安装为 Node.js 包,令我惊讶的是它似乎可以立即运行。但是我找不到拦截它可能生成的任何消息的方法。使用存在故意错误的 greeter.ts 文件执行以下操作 ts
我有这个: $ tsc -m amd --outFile dist/out.js lib/index.ts lib/index.ts(87,48): error TS1005: ';' expecte
我很惊讶这不在我能找到的文档中 - 但是有什么方法可以告诉 tsc 对目录及其子目录中的所有文件运行而无需经过整个 tsconfig.json 设置? 最佳答案 据我所知没有。在没有 tsconfig
我想知道是否有人知道有关发生上下文切换时 Linux 中的时间戳计数器的更多详细信息?直到现在我的观点是,TSC 值在每个时钟周期内只增加 1,无论是在内核模式还是在用户模式下都是独立的。我现在使用
使用: inline uint64_t rdtsc() { uint32_t cycles_high; uint32_t cycles_low; asm volatile ("CPUID\
我以独立于生态系统的方式编写 typescript 代码。我决定在导入中包含文件扩展名,以匹配网络和 Deno。 import xyz from "./foo.ts"; 如何让 typescript
首先,我已经准备好了this sample GitHub repository作为重现我的问题的最低要求。 我遇到了 tsc 无法将我的 TypeScript 编译为 JavaScript 的问题。
tsc 是否有任何标志使其更详细地说明它正在做什么?我找到了 --terse 和 --verbose 引用,但不确定这些是旧标志还是提议的标志,因为它们都不起作用。 例如,我想看看它正在处理哪些文件。
我是 tsconfig.json 配置的新手,但我只是想像它应该的那样将我的 src 目录编译为编译的 javascript,但它只是没有创建 outDir 包含编译代码的文件夹。 这是我的tscon
我正在尝试使用 tsc 为一些现有的 javascript 代码自动生成 typescript 声明文件。 typescript 编译器给了我一些我不明白的错误(在这种情况下为 TS9005)。是否有
我希望将单个 .ts 文件编译为标准输出,如下所示: tsc foo.ts > foo.js 这有可能吗?我想在不使用 tsconfig.json 文件的情况下控制输出的位置。 最佳答案 见 http
TypeScript 的维基百科页面提到编译器本身是用 TypeScript 编写的。 这怎么可能? TypeScript 转译为 JavaScript,而 JavaScript 通常由 Web 浏览
我正在使用 TSC ME240 打印机打印标签。 标签设计有公司标志、文字部分和条形码。 条形码和文本打印得很好,但 Logo 没有打印, Logo 是存储在打印机内存中的 .bmp 图像。 每次打印
我是一名优秀的程序员,十分优秀!