typescript - Null değere sahip bir özellik neden "örtük any" olarak kabul ediliyor?
Şu şekilde basit bir nesneye sahip olabilirim:
const wut = {
foo: 'foo',
bar: 123,
baz: { a: 'b' },
lol: null
};
Ve TypeScript tüm bunlarla iyi, yalnızca lol özelliğinin null olarak atanması dışında:
error TS7018: Object literal's property 'lol' implicitly has an 'any' type.
lol: null
~~~~~~~~~
Bu neden oluyor? Şunları yapmak zorunda kalıyorum:
...
lol: null as null
};
Bu inanılmaz derecede aptalca görünüyor.
*** DÜZENLE ***
Bazılarının belirttiği gibi, sahip olduğum bazı kodlar şunu yaptığı için strictNullChecks'i kapatmıştım:
public static listeners: { [ index in Event ]?: KeyMapping } = {};
...
static register (event: Event, key: KeyCode, callback: () => void, bubble = true) {
if (!service.listeners[event]) { service.listeners[event] = {}; }
if (!service.listeners[event][key]) { service.listeners[event][key] = {}; }
...
Ve TypeScript saçmalık saçıyor:
error TS2532: Object is possibly 'undefined'.
52 if (!service.listeners[event][key]) { service.listeners[event][key] = {}; }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Bu tamamen hiçbir anlam ifade etmiyor! O nesnenin undefined olmasını önlemek için şunu yapıyor:
if (!service.listeners[event]) { service.listeners[event] = {}; }
Evet, bu dosyada, iç içe geçmiş nesne özelliklerine erişimle ilgili milyarlarca aptalca hata vardı obj[X][Y][Z], bu yüzden beni deli ettiği için o sıkı null kontrolünü kapattım.
Eğer biri bunun nasıl olur da tanımsız olabileceğini ve yukarıdaki gibi bir şeyi nasıl yeniden yazmam gerektiğini açıklayabilirse, tüm gözlerimle dinliyorum.
*** YİNE GÜNCELLEME *** https://www.typescriptlang.org/play?#code/MYewdgzgLgBAsgQQApIJIDkDiMC8MDeAUDDAMoASqAYgCoBcMAjAGwA0xZSCAwgKIMBmAEzsSCAEriA8gHUA+gBletQQHZRMCdPnjUmcvRgCAnBt6luyfjCGrCAXxgBDCDFCQoAbkKEoATwAHAFMYAGkgv24QABMQvH9gkAAzeGQ0LABtAGsI5JgEoLzEFAxMAF1vQgBLMCgggCckp2AQhSroILAGgg4Qetj6hjAAVwBbACMG7xJgJwAbOfHmrIYACgBKXAA+GAA3ECro6Zhx4fHxuaCGcZAQS6cwb3sfd2gw3gBNABFZdFwYADkOT80RAAHcwADvK9YKFPgBVJAkf5AiLDAJQ3yBEJwPy8XadWDxbF5OHfX4wAA++RJKTJiO8BRg8PhqC+cCcAQCNQA5v98DAMjAarEAB4MaD1XkwMoMNodLr1GDPJnhPwcrnS-mC4VgMW6sIRKKxGUAfgYLLZGu5YD59mh4Dec3adUVEAYAqFIqCooNuPxhLNDDV1uljjw+HtL0dsCc0Wi8td3TwqyCBNqDH96agrBgwODRpiQU2OB2RBIVRSqwAhM6FQ0IBk04SypsBXWk-VG83amV+fblRxKzAax3Og2m9mytkIq2CDAx27Jy2Z34+xGB89nkA