网络音频API具有自己的类型,其中之一是BiquadFilterType
type BiquadFilterType = "lowpass" | "highpass" | "bandpass" | "lowshelf" | "highshelf" | "peaking" | "notch" | "allpass"
我正在使用a来让用户选择他或她将使用哪种类型。因此,我做了一个函数(从选择器中接收一个字符串)并将biquadfilter.type设置为接收值,因此我必须给它一个签名,例如
setValue(value: BiquadFilterType) ...
但是当我尝试在选择器为ts的地方调用我的函数时,我抱怨在给该函数一个字符串时,它期望BiquadFilterType。是否有任何方法可以检查(在我的函数内部)接收到的参数的类型(我尝试过typeof和instanceof,但似乎对TS没有意义),以便TS知道我正确使用了它?
答案 0 :(得分:1)
Typescript会编译为Javascript,并且在发生这种情况时会删除所有类型。因此,验证输入的唯一方法是在运行时通过类型卫士手动进行。
function isBiquadFilter(value: string = ""): value is BiquadFilterType {
switch(value) {
case "lowpass":
case "highpass":
...
case "allpass":
return true;
default:
return false;
}
}
然后,如果将其放在if语句中,Typescript将很高兴:
const filter: string = getBiquadFilterFromUntrustedSource();
if (isBiquadFilter(filter)) {
// filter is now casted as type BiquadFilterType
setValue(filter);
} else {
// filter is now casted as string. Handle appropriately.
}
或者,如果您希望在setValue
部分使用它,
function setValue(filter) {
if (isBiquadFilter(filter)) {
// Perform Action
} else {
// throw error
}
}