小编Fur*_*man的帖子

打字稿“{}”类型

关于 TypeScript{}类型的问题- 到目前为止,我认为它的意思是“没有属性的空对象”类型,但最近我偶然发现了禁止使用{}类型的eslint 规则,因为这意味着“任何非空值”。打字稿游乐场中的快速测试表明这是真的:

let d: {} = {};

d = false;
Run Code Online (Sandbox Code Playgroud)

此代码不会给出编译器错误,但是当我尝试分配null给 d 时,确实存在错误。所以我的问题是:

  1. {}TypeScript 中的实际类型是什么?它真的代表“任何非空值”(在 TypeScript 文档中找不到确认)?

  2. 我应该如何实际输入“没有任何属性的空对象”?

typescript

6
推荐指数
1
解决办法
2513
查看次数

对象文字中函数声明和函数表达式的区别

让我说我有一个方法的对象文字:

const testObj = {
   method: function() {
      console.log('declaration');
   } 
}
Run Code Online (Sandbox Code Playgroud)

与另一种方式定义的metod相同的对象:

const testObj = {
   method() {
     console.log('declaration');
   }
}
Run Code Online (Sandbox Code Playgroud)

在上面两个例子中定义方法字段之间有什么区别?我知道函数提升和函数声明可以在它们出现在代码中之前使用,但是当将函数定义为对象字段时,它似乎并不重要.

javascript

5
推荐指数
1
解决办法
143
查看次数

从类静态方法调用 ES6 类构造函数

我正在尝试在 JS ES6 类中实现单例模式。这是我到目前为止所写的:

let instance;

export class TestClass{

    constructor(){
        if(new.target){
            throw new Error(`Can't create instance of singleton class with new keyword. Use getInstance() static method instead`);
        }
    }
    testMethod(){
        console.log('test');
    }
    static getInstance(){
        if(!instance) {
            instance = TestClass.constructor();
        }

        return instance;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我调用静态方法时TestClass.getInstance(),我没有得到类对象的实例,我得到了

ƒ anonymous() {

}
Run Code Online (Sandbox Code Playgroud)

函数,无需访问 testMethod。我在我的代码中找不到错误 - 将不胜感激。

javascript singleton constructor ecmascript-6 es6-class

5
推荐指数
1
解决办法
5385
查看次数

使用 TypeScript 在 Node.js 中进行 Sequelize - 如果没有“new”,则无法调用类构造函数模型

我正在尝试在 Node.js + TypeScript 中使用 Sequelize。我正在尝试使用以下简单的代码:

import {Sequelize, Model, DataTypes} from 'sequelize';

const sequelize = new Sequelize('base', 'user', 'pass', {dialect: 'mysql'});

class User extends Model {
}
User.init({
    id: {
        type: DataTypes.INTEGER.UNSIGNED,
        autoIncrement: true,
        primaryKey: true,
        unique: true,
    },
    login: {
        type: DataTypes.STRING(255),
        allowNull: false,
        unique: true,
    },
    password: {
        type: DataTypes.STRING(255),
        allowNull: false,
    },
}, {
    tableName: 'users',
    sequelize,
});

sequelize.sync().then(() => {
    User.create({
        login: 'aaaa',
        password: 'bbbb',
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,当尝试运行编译的代码时,我收到以下错误:

未处理的拒绝类型错误:类构造函数模型无法在没有“new”的情况下调用

据我了解,这不是sequelize的问题:与javascript代码运行相同的代码运行没有问题,并在数据库正确的表中创建记录。我知道这是将 ES6 类转换为 ES5 的问题,但是我无法修复此错误。这是我的 tsconfig.json:

{ …
Run Code Online (Sandbox Code Playgroud)

node.js typescript es6-class

5
推荐指数
1
解决办法
4940
查看次数

AWS SDK S3 node.js 连接到本地 MinIO 服务器

我有用 Node.js 编写的应用程序服务器,它将文件上传到 AWS S3 存储。为此,我使用https://www.npmjs.com/package/aws-sdk,当我连接并上传到我的 AWS 生产存储时,它工作正常。但是在开发过程中,我想将文件上传到本地 MinIO 服务器(从 docker 镜像创建https://hub.docker.com/r/minio/minio/):

docker run -p 9000:9000 -p 9001:9001 \
  quay.io/minio/minio server /minio --console-address ":9001"
Run Code Online (Sandbox Code Playgroud)

MinIO 服务器本身工作正常,我可以在本地登录、创建存储桶等。但是,当我尝试使用适用于 Node.js 的 AWS SDK 将文件上传到本地 MinIO 存储时,我无法执行此操作:

import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';

#s3Client = new S3Client({
    credentials: {
        accessKeyId: config.getAwsStorageAccessKeyId(), // from env variables
        secretAccessKey: config.getAwsStorageSecretAccessKey(),
    },
    ...(globalConfig.isReleaseVersion() && {
        endpoint: config.getAwsStorageEndpoint(), // from env "http://localhost:9001"
    }),
});
Run Code Online (Sandbox Code Playgroud)

后来我尝试上传对象:

await this.#s3Client.send(new PutObjectCommand({
    Bucket: config.getAwsStorageWebflowBucketName(), // from env "test" …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 node.js minio

5
推荐指数
1
解决办法
4375
查看次数

暂停javascript异步功能直到用户操作

我有异步功能,我想让它执行到某一点,暂停执行,并在用户做出某些动作(例如点击按钮)时恢复执行功能.我试过这个:

let changed = false;

let promise = new Promise(function(resolve, reject){

    if(changed){

        resolve('success');
    }else{

        reject('failure');
    }
});

async function test(){

    console.log('function started');
    console.log('before await');

    try{

        const fulfilledValue = await promise;
        console.log(fulfilledValue);
    }catch(failure){

        console.log(failure);
    }

    console.log('after await');
};

document.getElementById('change').addEventListener('click', function(){

    if(!changed){

        console.log('changed = true');
        changed = true;
    }else{

        changed = false;
    }
});

test();
Run Code Online (Sandbox Code Playgroud)

但它不能像我想的那样工作.异步功能不会等到用户操作.据我所知,这是因为承诺立即被拒绝,因为"changed"标志最初设置为false.如何修复此代码以按预期工作?有可能吗?

javascript async-await ecmascript-6 es6-promise

4
推荐指数
1
解决办法
702
查看次数

如何在JSDoc中正确定义自己的类类型?

我有一个简单的ES6类,我想知道如何在JSDoc中正确地描述它。请注意,我想定义自己的类型,稍后WebStorm自动完成功能将识别出该类型。

以下示例有效吗?

/**
* @typedef {Object} View
* @class
*/
class View{...}
Run Code Online (Sandbox Code Playgroud)

javascript jsdoc webstorm ecmascript-6

3
推荐指数
1
解决办法
1895
查看次数

在bootstrap3中的同一行中选择表单及其标签

我有以下HTML代码:

<div class="col-sm-4">
      <div class="form-group" class="form-inline">
        <span style="white-space: nowrap">
          <label for="size">Board size:</label>
          <select class="form-control" id="size" style="background-color: black; color: silver">
            <option>small</option>
            <option>medium</option>
            <option>large</option>
            <option>huge</option>
          </select>
        </span>
      </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

我想要实现的是选择表单及其标签在同一行.我尝试从stackoverflow的类似问题中应用解决方案.Span with white-space: nowrap不起作用,既没有也没有class="form-inline"回答这个问题:在Bootstrap 3中的同一行中选择下拉按钮和表单 如何解决?

html css twitter-bootstrap twitter-bootstrap-3

2
推荐指数
2
解决办法
6683
查看次数

插入内容时防止<td>扩展

我有一个固定宽度和高度的表,包含三行和三列.行和列的大小自动相等,但是当我将innerHTML(或图像)放入表格单元格时,内部文本的单元格会以其他列的成本展开.内容插入后如何防止表格单元格扩展?我尝试过类似堆栈溢出问题的解决方案,但没有任何效果.

JS小提琴:https://jsfiddle.net/m20akmdx/14/

document.getElementById('8').innerHTML = 'R';
Run Code Online (Sandbox Code Playgroud)
table {
  width: 360px;
  height: 360px;
  border: 1px solid black;
  border-collapse: collapse;
}

td {
  border: 1px solid black;
  text-align: center;
}
Run Code Online (Sandbox Code Playgroud)
<table id="table">
  <tr>
    <td id="1"></td>
    <td id="2"></td>
    <td id="3"></td>
  </tr>
  <tr>
    <td id="4"></td>
    <td id="5"></td>
    <td id="6"></td>
  </tr>
  <tr>
    <td id="7"></td>
    <td id="8"></td>
    <td id="9"></td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

html css html-table

2
推荐指数
1
解决办法
2244
查看次数

TypeScript 条件排除类型从接口中排除

根据文档,我可以使用预定义的排除类型从某些类型中排除某些属性:

type Test = string | number | (() => void);

type T02 = Exclude<Test, Function>;
Run Code Online (Sandbox Code Playgroud)

但是,如果我有 Test 接口而不是 Test 类型,它似乎不起作用。如何在以下情况下获得类似的结果?

interface Test {
  a: string;
  b: number;
  c: () => void;
} 

// get somehow interface with excluded function properties??
Run Code Online (Sandbox Code Playgroud)

typescript typescript-typings

1
推荐指数
1
解决办法
564
查看次数