Typescript没有推断删除运算符和扩展运算符?

时间:2018-03-31 16:46:03

标签: typescript

interface Test {
    a: string;
    b: number;
    c: number;
}

const test = {
    a: 'a',
    b: 1,
    d: []
};

delete test.d;

const test2:Test = { ...test, c:1 };
=> Type '{ a: string; b: number; c: number; d: never[]; }' is not assignable to type 'Test'.
=> Object literal may only specify known properties, and 'd' does not exist in type 'Test'.

我通过删除运算符删除了 d 属性,但是我收到了类似的错误。

这种情况有办法吗?谢谢你的阅读!

2 个答案:

答案 0 :(得分:2)

变量的类型在赋值时被赋予,并且我不认为Typescript使用delete运算符执行任何流控制魔法。你可以让传播操作员摆脱d

interface Test {
    a: string;
    b: number;
    c: number;
}

const test = {
    a: 'a',
    b: 1,
    d: []
};

let { d, ...test3} = test

const test2:Test = { ...test3, c:1 };

答案 1 :(得分:0)

如果您使用的是tsconfig.json文件,请考虑添加:

{
  "compilerOptions": {
    ...
     "strictNullChecks": false, 
    }
    ...
}