我当前正在为一个函数编写类型,该函数接受ffmpeg -y -i "file.mkv" \
-map 0:1 -c:0 flac -af:0 "pan=3.1| FL < FL + 0.6*BL + 0.6*SL | FR < FR + 0.6*BR + 0.6*SR | FC = FC | LFE = LFE" \
-map 0:3 -c:1 flac -af:1 "pan=2.1| FL < FL + 0.6*BL + 0.6*SL + 0.5*FC | FR < FR + 0.6*BR + 0.6*SR + 0.5*FC | LFE = LFE" \
-map 0:3 -c:2 flac -af:2 "pan=2.1| FL < FL + 0.6*BL + 0.6*SL + 0.5*FC + 0.5*LFE | FR < FR + 0.6*BR + 0.6*SR + 0.5*FC + 0.5*LFE" \
audio.mkv
对象的数组,并返回Only '-af pan=2.1| FL < FL + 0.6*BL + 0.6*SL + 0.5*FC + 0.5*LFE | FR < FR + 0.6*BR + 0.6*SR + 0.5*FC + 0.5*LFE | LFE = FC' read, ignoring remaining -af options: Use ',' to separate filters
的数组。 ffmpeg -y -i "file.mkv" \
-map 0:1 -c:0 flac \
-map 0:3 -c:1 flac \
-map 0:3 -c:2 flac \
-af "pan=3.1| FL < FL + 0.6*BL + 0.6*SL | FR < FR + 0.6*BR + 0.6*SR | FC = FC | LFE = LFE,pan=2.1| FL < FL + 0.6*BL + 0.6*SL + 0.5*FC | FR < FR + 0.6*BR + 0.6*SR + 0.5*FC | LFE = LFE,pan=2.1| FL < FL + 0.6*BL + 0.6*SL + 0.5*FC + 0.5*LFE | FR < FR + 0.6*BR + 0.6*SR + 0.5*FC + 0.5*LFE | LFE = LFE" \
audio.mkv
在所有参数之间并不总是相同。
是否可以将返回类型设置为包含Clazz<U>
所有值的数组?
我已经尝试了多种方法,包括U
和U
的各种用法,但是仅仅在键入中这样做似乎并不会产生任何结果。每个U
项目的keyof
类型的值都可以通过调用typeof
来访问。
示例函数:(上下文on GitHub中的实际代码)
U
理想的结果:
Clazz
答案 0 :(得分:4)
我将对T
使用此实现,而我不会将其称为T
,因为该名称通常用于通用类型参数。我称之为Tee
,代替:
class Tee<U> {
constructor(public value: U) { }
}
这就是我写example()
的方式:
function example<X extends Array<Tee<any>>>(input: X | []) {
const out = [] as any as { [K in keyof X]: X[K] extends Tee<infer U> ? U : never };
for (const item of input) {
out.push(item.value);
}
return out;
}
这里发生了一些事情。一个是example
是一个generic函数,其通用类型参数X
是constrained,是一个类似Tee
的事物({{1 }}。假设Tee<any>
参数的类型为input
(我将在下面解释X
)。然后,输出类型就是我们断言的X | []
:
out
即mapping the array type { [K in keyof X]: X[K] extends Tee<infer U> ? U : never }
为另一种数组类型,其中我们使用conditional type inferences将每个元素的X
展开为Tee<U>
。这就是您要查找的类型操作。
实际上,编译器仅通过检查U
的实现就不可能发现您正在执行类型操作,这就是为什么我不得不使用type assertion告诉它example()
就是这样。
最后要说明的是out
类型的| []
。这只是一个提示,因此编译器将尝试将为input
传入的数组文字解释为tuple类型,而不是无序数组,如{{ 3}},这是GitHub上的一个问题,它要求一种方法来选择元组而不是无序数组。如果没有input
,您将倾向于获得无序数组(我想您可以,但不是必须的)。
足够的解释,让我们对其进行测试:
| []
看起来不错!好吧,希望能有所帮助;祝你好运!