microsoft / microsoft/TypeScript
strictNullCheck False Posivitve when access propery on created object.
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
TypeScript Version: 3.5.0-dev.20190501
Search Terms:
strict false positive object
Code
import * as azure from "@azure/storage-blob";
interface ISaveBlobOptions {
blobName: string;
contentDisposition?: {
fileName: string;
type: "inline" | "attachment";
};
contentType: string;
fileData: Buffer;
}
const saveBlobBase = async (input: ISaveBlobOptions): Promise<void> => {
this.validateSaveBlobBase(input);
await this.createStorage();
const options: azure.IBlockBlobUploadOptions = {
blobHTTPHeaders: {
blobContentType: input.contentType
}
};
if(input.contentDisposition) {
// Getting Object is possibly 'undefined'.
options.blobHTTPHeaders.blobContentDisposition = `${input.contentDisposition.type}; filename="${input.contentDisposition.fileName}"`;
}
if (input.fileData instanceof Buffer) {
await this.saveBlobBuffer(input.blobName, input.fileData, options);
} else if(this.isMulterFile(input.fileData)) {
await this.saveBlobMulterFile(input.blobName, input.fileData, options);
} else {
throw new Error("Unknown type for param file");
}
}
saveBlobBase({
blobName: "myBlobName",
contentDisposition: {
fileName: "foo.bar",
type: "inline"
},
contentType: "text/plain",
fileData: Buffer.from("SOME TEXT")
});
tsconfig
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"sourceMap": true,
"strictPropertyInitialization": true,
"strictNullChecks": true
}
}
Expected behavior:
since when the creating the options variable the property blobHTTPHeaders is also defined. I would expect that accessing properties off of blobHTTPHeaders should not throw a "Object is possibly 'undefined'."
Actual behavior:
Getting Object is possibly 'undefined'.
Playground Link:
Related Issues:
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo la diagnosi con l’esempio dell’epoca di TypeScript 3.5 e il relativo tsconfig, quindi confronta il comportamento con il compilatore attuale. Analizza come il type checker restringe le proprietà inizializzate negli object literals e aggiungi un regression test se il comportamento viene confermato come errato. Il lavoro è concluso quando l’esempio non segnala più la diagnosi false-positive senza indebolire strictNullChecks.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 35/100