这类似于#40796374,但这是类型,而我使用接口.
鉴于以下代码:
interface Foo {
name: string;
}
function go() {
let instance: Foo | null = null;
let mutator = () => {
instance = {
name: 'string'
};
};
mutator();
if (instance == null) {
console.log('Instance is null or undefined');
} else {
console.log(instance.name);
}
}Run Code Online (Sandbox Code Playgroud)
我有一个错误,说'属性'名称'在类型上'不存在'永远'.
我不明白实例怎么可能是'从不'.任何人都可以对此有所了解吗?
提前致谢.
blu*_*ope 71
如果你把组件写成 React.FC,并使用 useState(),
像这样写会有所帮助:
const [arr, setArr] = useState<any[]>([])
Run Code Online (Sandbox Code Playgroud)
Niv*_*han 59
如果您使用 React useRefhook 与TypeScript, 而不是使用,any您可以执行以下操作。
const ref = useRef<HTMLInputElement>(null);
Run Code Online (Sandbox Code Playgroud)
Sar*_*ana 39
因为你要分配instance给null.编译器推断它永远不会是除了之外的任何东西null.因此,它假定应该永远不执行else块,因此在else块中instance键入never.
现在,如果你没有将它声明为文字值null,并通过任何其他方式获得它(例如:)let instance: Foo | null = getFoo();,你会看到instance它将null在if块Foo内和else块内.
永远不要输入文档:https://www.typescriptlang.org/docs/handbook/basic-types.html#never
编辑:
更新示例中的问题实际上是编译器的一个开放问题.看到:
https://github.com/Microsoft/TypeScript/issues/11498 https://github.com/Microsoft/TypeScript/issues/12176
Eri*_*tke 30
我有同样的错误,并用括号表示法替换了点表示法以抑制它。
例如:
obj.name -> obj['name']
Run Code Online (Sandbox Code Playgroud)
小智 12
就我自己而言,当我启动阵列时。我用了:
selectedActors: any = [];
Run Code Online (Sandbox Code Playgroud)
所以它一开始就让它变得“动态”
Nit*_*mer 11
这看起来与此问题类似:假"在使用strictNullChecks更改回调内的值时,属性'不存在于类型'never'",该关闭作为此问题的副本(讨论):控制流分析中的权衡.
那个讨论很长,如果你找不到一个好的解决方案,你可以这样做:
if (instance == null) {
console.log('Instance is null or undefined');
} else {
console.log(instance!.name); // ok now
}
Run Code Online (Sandbox Code Playgroud)
Luc*_*iel 11
对我来说,以下代码有效:
const [disc, setDisc] = useState<any[]>([]);
Run Code Online (Sandbox Code Playgroud)
到目前为止我所看到的如下:当您没有指定传递给 useState() 的类型时,它会推断它是 never 类型。通过使其使用any[],您可以在请求时传递数据。
小智 8
对于打字稿开发人员...如果您使用 React.useRef() 钩子,而不是预先分配 null,声明并使用变量类型 any。
例子:
const initialRef: any = null;
const ref = React.useRef(initialRef);
Run Code Online (Sandbox Code Playgroud)
如果您在参数中收到错误,请保留any或any[]输入如下所示的类型
getOptionLabel={(option: any) => option!.name}
Run Code Online (Sandbox Code Playgroud)
<Autocomplete
options={tests}
getOptionLabel={(option: any) => option!.name}
....
/>
Run Code Online (Sandbox Code Playgroud)
小智 5
在您的 component.ts 文件中,只需将数组声明如下
public arrayName = ([] as any[]);
Run Code Online (Sandbox Code Playgroud)
这对我来说对 Angular 有用
| 归档时间: |
|
| 查看次数: |
37609 次 |
| 最近记录: |