Typescript tipe freshness 更嚴(yán)格對象字面量檢查
引言
Typescript 是結(jié)構(gòu)化的類型系統(tǒng),那么對于對象來說,如果 A 具有 B 的所有屬性,并且屬性對應(yīng)的類型相匹配,那么 A 就能賦值給 B
type A = {
name:string;
age:number;
}
type B = {
name:string
}
declare let a:A
declare let b: B
b = a
但是其中有一個(gè)例外的情況,會強(qiáng)制 a、b 具有完全相同的結(jié)構(gòu),被稱為 freshness,也被稱為更嚴(yán)格的對象字面量檢查
let b: {
name:string
}
b ={name:'1',age:1}
/*
Type '{ name: string; age: number; }' is not assignable to type '{ name: string; }'.
Object literal may only specify known properties, and 'age' does not exist in type '{ name: string; }'
*/
function freshness({name}:{name:string}){
return 1
}
freshness({name:'du',age:1});
/*
Argument of type '{ name: string; age: number; }' is not assignable to parameter of type '{ name: string; }'.
Object literal may only specify known properties, and 'age' does not exist in type '{ name: string; }'
*/
嚴(yán)格檢查存在缺點(diǎn)
之所以有這樣的嚴(yán)格檢查是因?yàn)榇嬖谝韵聝蓚€(gè)缺點(diǎn):
1.結(jié)構(gòu)化類型系統(tǒng)非常方便,但是它可能讓你誤以為某些函數(shù)接收的比他實(shí)際需要的多
function logName(something: { name: string }) {
console.log(something.name);
}
logName({ name: 'matt', job: 'being awesome' })
2.在實(shí)現(xiàn)此功能之前 Typescript 并不能很好的檢測出對象中的錯(cuò)誤,特別是指定可選類型時(shí)
interface TextOptions {
alignment?: string;
color?: string;
padding?: number;
}
function drawText(opts: TextOptions) { ... }
// None of these were errors before
drawText({ align: 'center' }); // Oops
drawText({ colour: 'grey' }); // Oops
drawText({ pading: 32}); // Oops
如上例子可能只是拼錯(cuò)了而已,但是在此之前 Typescript 并不能檢測出來
具體規(guī)則而言
- 每個(gè)對象字面量都被認(rèn)為是新鮮的
- 當(dāng)一個(gè)新的字面量對象被分配給一個(gè)變量或者傳遞給一個(gè)非空的目標(biāo)類型參數(shù)時(shí),如果對象指定了目標(biāo)類型中不存在的屬性,那就是一個(gè)錯(cuò)誤
- 在一個(gè)類型斷言中,或者當(dāng)一個(gè)對象字面的類型被擴(kuò)大時(shí),新鮮感就會消失
var x: { foo: number };
x = { foo: 1, baz: 2 }; // Error, excess property `baz`
var y: { foo: number, bar?: number };
y = { foo: 1, baz: 2 }; // Error, excess or misspelled property `baz`
當(dāng)新鮮類型被捕獲到變量中時(shí),不會發(fā)生錯(cuò)誤
var x: { foo: number };
x1 = { foo: 1, baz: 2 };
x = x1;
var y: { foo: number, bar?: number };
y1 = { foo: 1, baz: 2 };
y = y1;
參考: jkchao.github.io/typescript-…
以上就是Typescript tipe freshness 更嚴(yán)格對象字面量檢查的詳細(xì)內(nèi)容,更多關(guān)于Typescript tipe freshness對象字面量檢查的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
js jquery ajax的幾種用法總結(jié)(及優(yōu)缺點(diǎn)介紹)
本篇文章只要介紹了js jquery ajax的幾種用法總結(jié)(及優(yōu)缺點(diǎn)介紹),需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
微信小程序?qū)崿F(xiàn)觸底加載與下拉刷新的示例代碼
本文主要介紹了微信小程序?qū)崿F(xiàn)觸底加載與下拉刷新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
JS實(shí)現(xiàn)鼠標(biāo)滑過顯示邊框的菜單效果
這篇文章主要介紹了JS實(shí)現(xiàn)鼠標(biāo)滑過顯示邊框的菜單效果,涉及javascript響應(yīng)鼠標(biāo)事件動態(tài)修改頁面元素的相關(guān)操作技巧,需要的朋友可以參考下2016-09-09
ros::spin() 和 ros::spinOnce()函數(shù)的區(qū)別及詳解
這篇文章主要介紹了ros::spin() 和 ros::spinOnce()函數(shù)的區(qū)別及詳解的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感謝興趣的朋友一起看看吧2016-10-10
javascript中的undefined 與 null 的區(qū)別 補(bǔ)充篇
在Javascript中有兩個(gè)值用來代表類似空值的概念,undefined和null,這兩個(gè)很容易被混淆,他們表示的是兩個(gè)不同的概念。2010-03-03
引入autocomplete組件時(shí)JS報(bào)未結(jié)束字符串常量錯(cuò)誤
在引入jQuery的autocomplete組件時(shí),遇到j(luò)s報(bào)未結(jié)束字符串常量錯(cuò)誤,原因及解決方法如下,大家可以參考下2014-03-03
JavaScript實(shí)現(xiàn)簡單的日歷效果
本文給大家分享的是一個(gè)簡單的JavaScript制作的日歷模板,小伙伴們可以根據(jù)自己的需求,繼續(xù)補(bǔ)充,希望大家能夠喜歡2016-09-09

