在 Typescript/Javascript 中使用 .filter 方法时如何对临时变量进行类型检查

问题描述 投票:0回答:1

一个简单的问题,我遇到了一些问题

我有一个简单的方法

function doSomethin()
{
 const getSomeVariableFromAFunction = getSomeFromFunction.filter(foo => foo.id === 
 bar.id).map(foo =>foo.virtenv).sort();  

}

如何类型检查 foo 的类型为 Foo?

我试过了

 const getSomeVariableFromAFunction = getSomeFromFunction.filter({foo:Foo} => foo.id === 
 bar.id).map(foo =>foo.virtenv).sort();  

但这似乎不起作用。

javascript typescript types typechecking
1个回答
0
投票

在 JavaScript 中,构造函数扮演着类型的角色,因此大多数情况下,您可以检查构造函数。

比方说,您需要使用数组或对象,并忽略其他输入。你可以这样检查:

    const sortOut = unknownArgument => {
    if (unknownArgument == null) return;
    if (unknownArgument.constructor == Array) {
        for (let element of unknownArgument)
            console.log(element);
    } else if (unknownArgument.constructor == Object)
        for (let key in unknownArgument)
            console.log(key);
};
// test it:
sortOut([1, 2, 32, "some data"]); // first branch => 1, 2, 32, "some data"
sortOut({ a: 1, b: 2, c: 32, d: "some data" }); // second branch => a, b, c, d

现在,您可以使用自己的构造函数创建您自己类型的对象。你可以用同样的方式检查它的类型:

    function MyData() {
    this.a = 1;
    this.b = 2;
    this.c = 32;
    this.d = "some data";
}
// ...
const dealOnlyWithMyType = unknownArgument => {
    if (unknownArgument == null) return;
    if (unknownArgument.constructor != MyData) return;
    for (let key in unknownArgument)
        console.log(key);
}; //dealOnlyWithMyType
// test it:
dealOnlyWithMyType(new MyData()); // => a, b, c, d

typeof
呢?它不如使用
constructor
,因为它返回一个字符串,如果你用它来检查,你总是可能拼错字符串内容,并且不会得到任何错误。

然而,

typeof
有一个独特且有价值的好处:它可以处理不存在的对象,不仅是
undefined
,还可以处理那些没有真正定义的对象。这些是不同的事情。你可以定义一个对象,但是给它赋值
undefined
,但是这个对象实际上已经被定义了。考虑一下:

const unknownType = typeof aaaa; // let's assume aaa wasn't even declared anywhere
if (unknownType == typeof undefined)
    console.log("What the hell is aaaa?!");

您可以在映射中使用此类检查作为 typecheck

© www.soinside.com 2019 - 2024. All rights reserved.