Typescript react -Object 可能为零
Posted
技术标签:
【中文标题】Typescript react -Object 可能为零【英文标题】:Typescript react -Object is possibly nil 【发布时间】:2020-08-14 09:37:54 【问题描述】:我是 react 新手,我被要求帮助一个 react typescript 网站。目前我的匹配 const 正在返回一个 Object 可能是“null”。我试过让我的匹配常量为空,但对于我的生活,我无法弄清楚如何解决这个问题而不是得到这个错误。任何帮助将不胜感激。
case "text":
return (
<div>
" "
note.text.map((content: string, idx: number) =>
const result = [];
const matches = content.match(
/(.*?)(<a href=")?(https?|www)((".*?>.*?<\/a>)|[^\s>]?)*(.*?)/gi
);
if (!!matches)
matches.forEach((match) =>
let link;
if (/href="/i.test(match))
const url = match
.match(/<a href="(.*?)(?=">)/i)[0]
.replace('<a href="', "");
const linkText = match
.match(/(?:<a href=".*?">)(.*)(?=<\/a>)/)[0]
.replace(/(?:<a href=".*?">)/i, "");
link = <a href=url>linkText</a>;
else
const url = match.match(/(https?|www)[^\s]*/gi).join("");
link = <a href=url>url</a>;
const splitter = match.match(
/(<a href=")?(https?|www)[^\s]*(.*<\/a>)?/gi
)[0];
const paredPlainText = match.split(new RegExp(splitter));
result.push(paredPlainText[0]);
result.push(link);
result.push(paredPlainText[1]);
);
else
result.push(content);
return <p>result</p>;
)
</div>
);
【问题讨论】:
请添加您遇到的确切错误 【参考方案1】:我不完全确定我理解你的问题,描述听起来有点混乱,但我相信你的意思是那一行:
if (!!matches)
对吗?
这会将匹配调用的结果(可以是带有结果的数组或null
)转换为布尔值。只需使用
if (matches)
相反,它检查一个真实的表达式(null
代表一个虚假的结果)。
如果此答案不是您所追求的,请在您的问题中添加更多描述。
【讨论】:
我相信这两者是等价的,因为在if
语句中评估 matches
会将值强制转换为布尔值,与 !!matches
相同
是的,从 JS 的角度来看,但不是从 TS 的角度来看。如果没有适当的 null 保护,TS 解析器/linter 可能不接受对潜在 null 值的访问。
if(matches)
用作空保护,请参阅:typescriptlang.org/play/#code/…【参考方案2】:
感谢大家的回复!这是我在.match
之后使用非空断言运算符!
的答案,如下所示
case "text":
return (
<div>
" "
note.text.map((content: string, idx: number) =>
const result = [];
const matches = content.match(
/(.*?)(<a href=")?(https?|www)((".*?>.*?<\/a>)|[^\s>]?)*(.*?)/gi
);
if (!!matches)
matches.forEach((match) =>
let link;
if (/href="/i.test(match))
const url = match
.match(/<a href="(.*?)(?=">)/i)![0]
.replace('<a href="', "");
const linkText = match
.match(/(?:<a href=".*?">)(.*)(?=<\/a>)/)![0]
.replace(/(?:<a href=".*?">)/i, "");
link = <a href=url>linkText</a>;
else
const url = match.match(/(https?|www)[^\s]*/gi)!.join("");
link = <a href=url>url</a>;
const splitter = match.match(
/(<a href=")?(https?|www)[^\s]*(.*<\/a>)?/gi
)![0];
const paredPlainText = match.split(new RegExp(splitter));
result.push(paredPlainText[0]);
result.push(link);
result.push(paredPlainText[1]);
);
else
result.push(content)
console.log(result);
return <p>result</p>;
)
</div>
);
【讨论】:
以上是关于Typescript react -Object 可能为零的主要内容,如果未能解决你的问题,请参考以下文章
React + Typescript:TypeScript 错误:类型“字符串”与类型“CSSProperties”没有共同的属性
将 React-Apollo 教程改编为 Typescript 时出现 Typescript 错误
对 React 中如何使用接口(TypeScript)感到困惑
typescript+reactjs+requirejs:如何将 react-dom 导入 typescript
[react] 可以使用TypeScript写React应用吗?怎么操作?
Webpack + React + TypeScript:未找到模块 ... in ... node_modules/react/