你好,我在一个数组中有一个三元运算符:
[5,-1,1,0,2,1,7,11,-3,-1,-2,0,-1,5,9,-4,-5,-3,-4,2,6,1,3,2,8,12,1,0,6,10,1,7,11,5,9,10]
打字稿似乎认为
this.columns = [
{
name: 'item' === 'list' ? 'list' : 'n/a'
}
];
我要声明它的类型,以便引发错误。谁能建议另一种写此三元运算符的方法,这样我就不会出现此错误?
编辑:我了解: 'item'
始终为假。由于要使用的库,它必须采用这种格式。左侧与库的属性匹配:
'item' === 'list'
我的坏事我应该早点解释
答案 0 :(得分:0)
您会收到编译错误,因为'item' === 'list'
将始终返回false。您在这里比较2个文字。
如果您使用变量而不是文字,它将进行编译。
var item = 'item';
this.columns = [
{
name: item === 'list' ? 'list' : 'n/a'
}
];
编辑:
应该将对象分配给某些对象。让我们将其命名为道具:
const props = {
item: 'list'
}
this.columns = [
{
name: props.item === 'list' ? 'list' : 'n/a'
}
];
答案 1 :(得分:0)
Typescript的概念为literal types。 您正在测试两个不同的文字是否相等-这是不可能的,因为类型(文字类型!)是不同的。您只能比较可能相等的对象。
看看这个例子,它有同样的缺陷:
const x = 'item';
const y = 'list';
const test = (x === y);
TypeScript编译器会在x === y
部分抱怨这一点,因为x
具有类型(和值)"item"
,而y
具有类型(和值){ {1}}。
这些文字字符串类型是"list"
的子类型,但相等运算符需要更多-string
类型的x
只能由X
与===
进行比较如果假设一个对象可能同时属于y
和Y
类型(如果很好,如果X
是Y
的子类型。
您收到的消息Y
表明了这一点。
在TypeScript 3.0+上,您还会收到另一条易于理解的消息:X
请注意以下内容将起作用,因为您明确地隐藏了一些类型信息:
Operator '===' cannot be applied to types '"item"' and '"list"'
在您的示例中,您可能会写:
This condition will always return 'false' since the types '"item"' and '"list"' have no overlap.
答案 2 :(得分:0)
在编辑问题后重新阅读问题后,您处于以下情况:
从某个通话中您得到了一个对象,我们称它为obj
,其中包含
{
item: 'list'
}
在obj
旁边的item
中可能还有更多属性。
现在,您要创建一个数组(可能是列定义),其内容取决于item
中属性obj
的值。
您试图通过简单地编写'item'
来获取该属性的值-这样做并非如此。要正确执行,请输入:
this.columns = [
{
name: obj.item === 'list' ? 'list' : 'n/a'
}
];
请注意,如何通过编写item
来显式访问obj
的属性obj.item
!