此
$query = mysqli_query($connect, "SELECT * FROM weapons WHERE id IN (1, 8, 5, 3, 2,5) ");
while($row = $query->fetch_assoc())
{
echo $row['name'] . ', ' . $row['type'];
}
和这个
const { foo: IFoo[] } = bar;
会合理地导致错误。
这个
const { foo: Array<IFoo> } = bar;
只会破坏const { foo: TFoo } = bar;
属性。
如何为析构化对象属性指定类型?
答案 0 :(得分:67)
事实证明,可以为整个解构模式指定:
之后的类型:
const {foo}: {foo: IFoo[]} = bar;
实际上并不比普通的
更好const foo: IFoo[] = bar.foo;
答案 1 :(得分:26)
我显然有点迟到了,但是:
interface User {
name: string;
age: number;
}
const obj: any = { name: 'Johnny', age: 25 };
const { name, age }: User = obj;
属性类型name
和age
应分别正确推断为string
和number
。
答案 2 :(得分:2)
我自己的问题的后续行动。
不需要为对象属性指定类型,因为它们是根据已分解的对象推断出来的。
考虑到bar
的键入正确,将推断出foo
的类型:
const bar = { foo: [fooValue], ... }; // bar type is { foo: IFoo[], ... }
...
const { foo } = bar; // foo type is IFoo[]
即使没有正确键入bar
(any
或unknown
),也可以声明其类型:
const { foo } = bar as { foo: IFoo[] }; // foo type is IFoo[]
答案 3 :(得分:1)
我有这样的情况:
const { _id } = req.query;
if (_id.contains('whatever')) { // typescript complained
...
}
其中“ req.query”的键入类似于NextJS中的string | string[]
……因此可以这样做:
const { _id } = req.query as { _id: string };
if (_id.contains('whatever')) { // typescript is fine
...
}
具有讽刺意味的是Typescript是正确的,但我不想做实际的编程工作来处理字符串和字符串数组。