为啥在数组上使用 ?: 运算符时打字稿不需要`undefined`? [复制]
Posted
技术标签:
【中文标题】为啥在数组上使用 ?: 运算符时打字稿不需要`undefined`? [复制]【英文标题】:Why does typescript not require `undefined` when using the ?: operator on an array? [duplicate]为什么在数组上使用 ?: 运算符时打字稿不需要`undefined`? [复制] 【发布时间】:2022-01-24 00:10:57 【问题描述】:type Artifact =
a:string
const items : Artifact[] = [];
// this is a syntax error
let z?: Artifact;
// this is an error because you cannot assign undefined.
const b : Artifact = undefined;
// this worked!? but I don't think it should because the
// value could be undefined
const c : Artifact = items?.[0];
// These work as expected.
const a : Artifact|undefined = undefined;
const d : Artifact|undefined = items?.[0];
Playground
【问题讨论】:
?:
运算符是什么?您的问题是“为什么编译器认为读取的数组永远不会产生undefined
?我假设是这样;请参阅this question 及其答案。如果我的假设是错误的并且您要问其他问题,请edit 区分这是另一个问题。祝你好运!
【参考方案1】:
项目在您的代码中不断定义,所以“?”被忽略
我扩展了您的示例以显示所有变体 Playground Link
const items: Artifact[] | undefined = [];
const undefinedItems: Artifact[] | undefined = undefined;
function getItems(): Artifact[] | undefined
return [];
const c0 : Artifact = items[0];
const c1 : Artifact = items?.[0];
const c2 : Artifact = undefinedItems?.[0];
// ^ Type 'undefined' is not assignable to type 'Artifact'
const c3 : Artifact = getItems()[0];
// ^ Object is possibly 'undefined'.
const c4 : Artifact = getItems()?.[0];
// ^ Type 'Artifact | undefined' is not assignable to type 'Artifact'
【讨论】:
以上是关于为啥在数组上使用 ?: 运算符时打字稿不需要`undefined`? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 ionic2 中添加自定义用户定义的 Cordova 插件,但打字稿不起作用