GVKun编程网logo

为什么数组不能分配给Iterable?(数组为什么不能直接赋值)

8

如果您想了解为什么数组不能分配给Iterable?的相关知识,那么本文是一篇不可错过的文章,我们将对数组为什么不能直接赋值进行全面详尽的解释,并且为您提供关于'string|类型的参数undefine

如果您想了解为什么数组不能分配给Iterable?的相关知识,那么本文是一篇不可错过的文章,我们将对数组为什么不能直接赋值进行全面详尽的解释,并且为您提供关于'string | 类型的参数undefined' 不能分配给类型为 'string' 的参数 “未定义”类型不能分配给“字符串”类型 问题解决方案、'users | 类型的参数undefined' 不能分配给类型为 'users' 的参数 “未定义”类型不能分配给“用户”类型、angular – 类型’Observable>’不能分配给’Observable’类型、c# – 为什么我不能使类Serializable?的有价值的信息。

本文目录一览:

为什么数组不能分配给Iterable?(数组为什么不能直接赋值)

为什么数组不能分配给Iterable?(数组为什么不能直接赋值)

使用 Java5,我们可以编写:

Foo[] foos = ...for (Foo foo : foos)

或者只是在 for 循环中使用 Iterable。这非常方便。

但是,您不能像这样为可迭代编写通用方法:

public void bar(Iterable<Foo> foos) { .. }

并用数组调用它,因为它不是可迭代的:

Foo[] foos = { .. };bar(foos);  // compile time error

我想知道这个设计决定背后的原因。

答案1

小编典典

数组可以实现接口
(Cloneablejava.io.Serializable)。那为什么不Iterable呢?我猜想Iterable强制添加一个iterator方法,而数组不实现方法。char[]甚至不覆盖toString.
无论如何,引用数组应该被认为不太理想 - 使用Lists。正如 dfa 评论,Arrays.asList将明确地为您进行转换。

(话虽如此,您可以调用clone数组。)

'string | 类型的参数undefined' 不能分配给类型为 'string' 的参数 “未定义”类型不能分配给“字符串”类型 问题解决方案

'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

此外,可以在编辑器中看到类型: string

'users | 类型的参数undefined' 不能分配给类型为 'users' 的参数 “未定义”类型不能分配给“用户”类型

'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’类型

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中的哪些更改使我的应用程序停止正常工作?

TypeScript 2.4引入了更好的泛型检查.它突出显示了应该修复的代码中的错误.

例如,handleSuccess的返回类型与返回的类型不匹配;它返回一个匿名对象,但输入为Observable< Response>.因为它与map一起使用,你最终会得到一个组合的observable,它被输入为Observable< Response |可观察到的与LT;响应>取代. 您看到的错误是真实的,应该修复.

c# – 为什么我不能使类Serializable?

c# – 为什么我不能使类Serializable?

我在我的viewstate存储一些对象,我想知道是否有任何缺点,使一个类Serializable?

使所有类可序列化是不好的做法吗?

解决方法

首先.避免观看状态.

一般来说,序列化(textual)用于传输对象.

您应该避免将任何类标记为不是DTO(数据传输对象)或消息类的可序列化.我们这样做有几个原因.以串行格式拾取您的类的内容可能没有非DTO类的方法信息(在原始程序集中).其次,一个类可以引用一个资源(DB连接,文件句柄等)不要序列化这些,因为除序列化不重新建立资源连接和状态,除非明确设计,但仍然是一个坏主意.

总结如下:当您使用上下文方法并存储要使用的第三方的数据时,请勿序列化. (像使用方法的服务响应是一个坏主意).并且当类包含资源引用时不要序列化.尽可能保持可序列化的对象清除方法.这可能需要重新考虑服务类型模式.

做序列化DTO和消息.

这更多的是设计选择.

关于为什么数组不能分配给Iterable?数组为什么不能直接赋值的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于'string | 类型的参数undefined' 不能分配给类型为 'string' 的参数 “未定义”类型不能分配给“字符串”类型 问题解决方案、'users | 类型的参数undefined' 不能分配给类型为 'users' 的参数 “未定义”类型不能分配给“用户”类型、angular – 类型’Observable>’不能分配给’Observable’类型、c# – 为什么我不能使类Serializable?等相关知识的信息别忘了在本站进行查找喔。

本文标签: