问题描述
我想要一个属性为 a
的对象,它是一个数字,或者一个属性为 b
的对象,它是一个字符串。在普通 JavaScript 中,如果其他对象已通过,则变量 test 将是一个数字或未定义。为什么这是 TypeScript 中的错误?或者有没有办法在没有类型保护的情况下做到这一点?
function t(aOrB: {a:number} | {b:string}){
const test: number | undefined = aOrB.a
}
解决方法
您需要在返回前检查 WITH child (id,child_id) AS (
SELECT id,child_id,0 AS level
FROM my_table
UNION ALL
SELECT e.id,e.child_id,level + 1
FROM my_table e
JOIN child s
ON e.id = s.child_id
)
SELECT
m.id,s.child_id
FROM child s
JOIN my_table m
ON s.id = m.child_id;
和 if ('a' in aOrB)
。
你可以像这样使用typeOf
function t(aOrB:any){
const test =((typeof(aOrB) == "object")?aOrB.a:aOrB);
console.log(test);
}
t({a:123});
t(123)