如果您想了解为什么数组不能分配给Iterable?的相关知识,那么本文是一篇不可错过的文章,我们将对数组为什么不能直接赋值进行全面详尽的解释,并且为您提供关于'string|类型的参数undefine
如果您想了解为什么数组不能分配给Iterable?的相关知识,那么本文是一篇不可错过的文章,我们将对数组为什么不能直接赋值进行全面详尽的解释,并且为您提供关于'string | 类型的参数undefined' 不能分配给类型为 'string' 的参数 “未定义”类型不能分配给“字符串”类型 问题解决方案、'users | 类型的参数undefined' 不能分配给类型为 'users' 的参数 “未定义”类型不能分配给“用户”类型、angular – 类型’Observable>’不能分配给’Observable’类型、c# – 为什么我不能使类Serializable?的有价值的信息。
本文目录一览:- 为什么数组不能分配给Iterable?(数组为什么不能直接赋值)
- 'string | 类型的参数undefined' 不能分配给类型为 'string' 的参数 “未定义”类型不能分配给“字符串”类型 问题解决方案
- 'users | 类型的参数undefined' 不能分配给类型为 'users' 的参数 “未定义”类型不能分配给“用户”类型
- angular – 类型’Observable>’不能分配给’Observable’类型
- c# – 为什么我不能使类Serializable?
为什么数组不能分配给Iterable?(数组为什么不能直接赋值)
使用 Java5,我们可以编写:
Foo[] foos = ...for (Foo foo : foos)
或者只是在 for 循环中使用 Iterable。这非常方便。
但是,您不能像这样为可迭代编写通用方法:
public void bar(Iterable<Foo> foos) { .. }
并用数组调用它,因为它不是可迭代的:
Foo[] foos = { .. };bar(foos); // compile time error
我想知道这个设计决定背后的原因。
答案1
小编典典数组可以实现接口
(Cloneable
和java.io.Serializable
)。那为什么不Iterable
呢?我猜想Iterable
强制添加一个iterator
方法,而数组不实现方法。char[]
甚至不覆盖toString
.
无论如何,引用数组应该被认为不太理想 - 使用List
s。正如 dfa 评论,Arrays.asList
将明确地为您进行转换。
(话虽如此,您可以调用clone
数组。)
'string | 类型的参数undefined' 不能分配给类型为 'string' 的参数 “未定义”类型不能分配给“字符串”类型 问题解决方案
const handleChange = React.useCallback((eventKey: eventKey) => {
let property = dict.find(e => e.name === eventKey)?.prop;
changeProp(property); //Getting error here
}
在这里,在您的函数中,当您在 dict 上查找时,您假设 find 函数可以返回一个空值 dict.find(e => e.name === eventKey)?.prop
,
这样 property
可以是 undefined | string
。
尝试以这种方式更新您的函数 dict.find(e => e.name === eventKey)?.prop || ""
,这意味着如果 find 没有返回任何值,而不是 undefined,变量 property
将是 ""
。
Array find 方法从满足条件的数组中返回第一个元素。但是当没有找到匹配的元素时它返回 >>> t.bool().int()
tensor([0,1,1],dtype=torch.int32)
。
这使得 undefined
的返回类型为 find
,即 Your_Element_Type | undefined
对于您的问题(在阅读 string | undefined
的结果后 prop
).
问题
find
要解决此问题,您需要在函数 let property = dict.find((e) => e.name === eventKey)?.prop
// property will either be a string or undefined
changeProp(property);
中接受 string | undefined
,或者提供后备字符串值(空字符串)。
解决方案
提供一个空字符串作为后备值:
changeProp
此外,可以在编辑器中看到类型:
'users | 类型的参数undefined' 不能分配给类型为 'users' 的参数 “未定义”类型不能分配给“用户”类型
如何解决''users | 类型的参数undefined'' 不能分配给类型为 ''users'' 的参数 “未定义”类型不能分配给“用户”类型?
我正在尝试使用 TYPEORM 创建一个 put 方法,但不明白如何修复此错误以及原因。这个请求一个typeof?但我的用户有价值。 (我是新手,当然)。
谁能帮帮我?我该如何解决?
什么时候:
const user: any = await usersRepository.findOne(req.params.id)
所以: 没问题 (为什么)
错误:
{
"resource": "/Users/camargo/Documents/Estudo/nodejs-1/source/server.ts","owner": "typescript","code": "2345","severity": 8,"message": "Argument of type ''users | undefined'' is not assignable to parameter of type ''users''.\n Type ''undefined'' is not assignable to type ''users''.","source": "ts","startLineNumber": 71,"startColumn": 31,"endLineNumber": 71,"endColumn": 35
}
代码
** source/server.ts */
import http from ''http'';
import { connection } from "./connection/connection"
import express,{ Express } from ''express'';
import morgan from ''morgan'';
import routes from ''./routes/posts'';
import cors from "cors";
import { users } from ''./entities/users'';
// Setando rotas express
const router: Express = express();
const app=express()
app.use(cors())
app.use(express.json())
const server=app.listen(3000,()=>{
console.log("Server rodando... 3000....")
})
app.get("/api",(req,res)=>{
res.send("API - Bem Vindo")
})
connection.then(
async connection=>{
console.log("Conectado")
const usersRepository = connection.getRepository(users);
app.get("/api/users/:id",async(req,res)=>{
/* Metodos */
//MetoDO GET
const user = await usersRepository.findOne({where: { id: req.params.id }})
res.json({
message:"success",payload: user
})
})
// MetoDO POST
app.post("/api/users",async (req,res)=>{
console.log("body",req.body)
const user = await usersRepository.create(req.body)
const results = await usersRepository.save(user);
res.json({
message: "success",payload: results
});
})
// MetoDO DELETE
app.delete("/api/users/:id",res)=>{
const user = await usersRepository.delete(req.params.id)
res.json({
message:"success",})
})
//MetoDO PUT
app.put("/api/users/:id",res)=>{
const user = await usersRepository.findOne(req.params.id)
usersRepository.merge(user,req.body);
const result = await usersRepository.save(user);
res.json({
message:"success",payload:result
})
})
}
).catch(error=>{
console.log(error)
})
/** Conexao teste morgan */
router.use(morgan(''dev''));
/** Parse the req */
router.use(express.urlencoded({ extended: false }));
/** Takes care of JSON data */
router.use(express.json());
/** Regras da API*/
router.use((req,res,next) => {
// CORS
res.header(''Access-Control-Allow-Origin'',''*'');
// CORS headers
res.header(''Access-Control-Allow-Headers'',''origin,X-Requested-With,Content-Type,Accept,Authorization'');
// CORS metodos
if (req.method === ''OPTIONS'') {
res.header(''Access-Control-Allow-Methods'',''GET PATCH DELETE POST'');
return res.status(200).json({});
}
next();
});
/** Routes */
router.use(''/'',routes);
/** Error handling */
router.use((req,next) => {
const error = new Error(''not found'');
return res.status(404).json({
message: error.message
});
});
/** Server */
const httpServer = http.createServer(router);
const PORT: any = process.env.PORT ?? 6060;
httpServer.listen(PORT,() => console.log(`Server rodando em ${PORT}`));
解决方法
const user = await usersRepository.findOne(req.params.id) 返回 user 或 undefined 因为不能保证给定 ID 的用户存在。
usersRepository.merge 需要 users
类型,而您提供的是 users|undefined
类型,如果您在 tsconfig.json 中启用了 strictNullChecking
,则它们彼此不兼容
要解决此问题,您必须先对其进行空检查:
const user = await usersRepository.findOne(req.params.id)
if(user) {
usersRepository.merge(user,req.body);
const result = await usersRepository.save(user);
res.json({
message:"success",payload:result
})
}
res.status(404).json({message: "user not found"})
angular – 类型’Observable>’不能分配给’Observable’类型
import { Injectable } from '@angular/core'; import { Http,Response } from '@angular/http'; import 'rxjs/add/observable/throw'; import 'rxjs/add/operator/catch'; import 'rxjs/add/operator/map'; import { Observable } from 'rxjs/Observable'; @Injectable() export class AddressService { constructor(private http: Http) { } getAnything = (): Observable<Response> => { return this.http.get('https://my_api.com') .map(this.handleSuccess) .catch(this.handleError); } handleError = (error: Response): Observable<Response> => { return Observable.throw(error || 'Server Error'); } handleSuccess = (response: Response): Observable<Response> => { let body; if (response.text()) { body = response.json(); } return body || {}; } }
它工作得很好,直到我将Typescript从2.3.4升级到2.4.1.
现在,升级后,我收到了奇怪的错误:
Type 'Observable<Response | Observable<Response>>' is not assignable to type 'Observable<Response>'
这有什么意义? TS 2.4.x中的哪些更改使我的应用程序停止正常工作?
例如,handleSuccess的返回类型与返回的类型不匹配;它返回一个匿名对象,但输入为Observable< Response>.因为它与map一起使用,你最终会得到一个组合的observable,它被输入为Observable< Response |可观察到的与LT;响应>取代. 您看到的错误是真实的,应该修复.
c# – 为什么我不能使类Serializable?
使所有类可序列化是不好的做法吗?
解决方法
一般来说,序列化(textual)用于传输对象.
您应该避免将任何类标记为不是DTO(数据传输对象)或消息类的可序列化.我们这样做有几个原因.以串行格式拾取您的类的内容可能没有非DTO类的方法信息(在原始程序集中).其次,一个类可以引用一个资源(DB连接,文件句柄等)不要序列化这些,因为除序列化不重新建立资源连接和状态,除非明确设计,但仍然是一个坏主意.
总结如下:当您使用上下文方法并存储要使用的第三方的数据时,请勿序列化. (像使用方法的服务响应是一个坏主意).并且当类包含资源引用时不要序列化.尽可能保持可序列化的对象清除方法.这可能需要重新考虑服务类型模式.
做序列化DTO和消息.
这更多的是设计选择.
关于为什么数组不能分配给Iterable?和数组为什么不能直接赋值的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于'string | 类型的参数undefined' 不能分配给类型为 'string' 的参数 “未定义”类型不能分配给“字符串”类型 问题解决方案、'users | 类型的参数undefined' 不能分配给类型为 'users' 的参数 “未定义”类型不能分配给“用户”类型、angular – 类型’Observable>’不能分配给’Observable’类型、c# – 为什么我不能使类Serializable?等相关知识的信息别忘了在本站进行查找喔。
本文标签: