TypeScript 高级类型-联合类型(|)
ITPOW2019/11/29 15:38:46
我不知道为什么要取这个名字,其实这个是或的意思 。
function f(p : number | boolean) { if (typeof p == "number") { alert("number"); } else if (typeof p == "boolean") { alert("boolean"); } } f(1); f(false); // f(""); // 这里是错误的,通不过编译
可以看出,这个参数,我们即可以传数字,也可以传布尔,但不能传其他类型。与 any 相比,它比 any 有更自由的限制。
再看看神奇的:
type myType = { code : 0 } | { code : 1, message: string } ; function f(t: myType) { if (t.code == 0) { alert("0"); // alert(t.message) // 这里是错误的,通不过编译,因为 code 在 0 的情况下,没有 message 成员 } else if (t.code == 1) { alert("1"); alert(t.message); // 这里可以使用 t.message } // else if (t.code == 2){ // 这里是错误的,通不过编译,因为 code 只能是 0 和 1 // } } let t1 : myType = { code: 0 }; let t2 : myType = { code: 1, message: "www.itpow.com" // 根据 myType 定义,这种情况下,必须指定 message }; // if (t1.code == 1) // 这里是错误的,通不过编译,因为已经明确了 t1 的 code 一定是 0,不能使用 t1.code == 1 f(t1); f(t2);
<<返回首页<<