typescript关于接口,对象字面量额外属性检测问题,为什么使用断言或者变量时就不会检测额

interface SquareConfig {

    color?: string;

    width?: number;

}


function createSquare(config: SquareConfig): { color: string; area: number } {

    // ...

}


let mySquare = createSquare({ colour: "red", width: 100 });

ts编译这段代码时会抛错,但是使用如下两种方式就不会抛错,这是什么原理?官网的解释让我无法理解,只会让我觉得ts语法好随便...

let mySquare = createSquare({ width: 100, opacity: 0.5 } as SquareConfig);

或者

let squareOptions = { colour: "red", width: 100 };

let mySquare = createSquare(squareOptions);

这样都不会报错,使用断言的时候(as/<>)是会按照什么规则比照接口吗?然后将对象字面量复制给变量,我知道这是对象的一个引用指针,但是这样为什么就不会检测额外的属性了呢?官网地址

暮色呼如
浏览 388回答 1
1回答

繁花如伊

第一个例子:as&nbsp;不是断言吧&nbsp;as&nbsp;是强制转化 就说明你知道你要做的事情 当然 ts 也就让你编译过了第二个例子 好像本来就应该过的吧&nbsp;color&nbsp;你又不是一定要;&nbsp;colour&nbsp;是另外一个属性了以前不过的原因是 ts 对 对象字面量有独特的 check 罢了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript