エラーの様子
TypeScriptハンドブックで見た例でよくわからなかったエラーがありましたが
いずれもう少し読みすすめていけばわかるようになるだろうと思って
放置していた疑問についておしえてください
他にも例はあるのですが最初に私の環境でこの種のエラーメッセージが出たのは
以下の[交差型の説明]のサンプルでした
TypeScript
1function extend<T, U>(first: T, second: U): T & U { 2 let result = <T & U>{}; 3 for (let id in first) { 4 (<any>result)[id] = (<any>first)[id]; 5 } 6 for (let id in second) { 7 if (!result.hasOwnProperty(id)) { // [Error] 'hasOwnProperty' は型 'T & U' に存在しません。ts(2339) 8 (<any>result)[id] = (<any>second)[id]; 9 } 10 } 11 return result; 12} 13
上記のresultは2つの型引数で交差型として特定されおり、
その型においてhasOwnPropertyプロパティーは無いというエラーです
ましてやまだ未定のTとUであるわけですから当然なのですが・・・
もちろんresultの宣言から型を取り去ればこのエラーはなくなります
###疑問点
TypeScriptにおいて、型を特定した途端にいわゆるJavaScriptとしての継承は断ち切られれるのだろうか?
そうであるならTypeScriptとして、このようなケースで(JavaScriptとしての、自分や親のプロパティーにアクセスしたい時など)、どのようにすればエラーなくできるでしょうか?
またハンドブックのサンプルでこのようなエラーメッセージがでるのは
私のリンターなど環境の設定がおかしいのか?
など、全く理解が足りてないのですがよろしくおねがします。
環境
VS Code 1.38.1
WebPack 4.16.3
WebPackCLI 3.1.0
typescript 3.2.4
ts-loader 4.4.2"
eslint 5.14.0
tsconfig.json
JSON
1{ 2 "compilerOptions": { 3 "target": "es6", 4 "module": "commonjs", 5 "strict": true, 6 "strictNullChecks": true, 7 "esModuleInterop": true, 8 "sourceMap": true, 9 "outDir": "./dist/js/", 10 "rootDir": "./src/ts/", 11 "lib": ["es6", "dom", "es2018"], 12 "typeRoots": ["./typings"], 13 "strictFunctionTypes": false, 14 }, 15}
.eslintrc.js
JavaScript
1module.exports = { 2 "ecmaFeatures": { 3 "modules": true 4 }, 5 "env": { 6 "browser": true, 7 "node" : true, 8 "es6" : true, 9 "mocha":true, 10 "jquery": true 11 }, 12 "extends": [ 13 "eslint:recommended", 14 "plugin:prettier/recommended" 15 ], 16 "plugins": [ 17 "@typescript-eslint" 18 ], 19 "globals": { 20 }, 21 "parser": "@typescript-eslint/parser", 22 "parserOptions": { 23 "sourceType": "module", 24 "project": "./tsconfig.json" 25 }, 26 "settings":{ 27 'import/extensions': ['.js','jsx','.ts','tsx'], 28 'import/resolver':{'node':['.js','jsx','.ts','tsx']} 29 }, 30 "rules": { 31 "no-console": "off", 32 "no-irregular-whitespace":'off', 33 "no-extra-semi": "warn", 34 "no-undef": "warn", 35 "quotes": ["warn", "single"], 36 "space-before-blocks": ["warn", { "functions": "always" }], 37 "@typescript-eslint/adjacent-overload-signatures": "error", 38 "no-unused-vars":"off", 39 "prettier/prettier": [ 40 "error", 41 { 42 "singleQuote": true, 43 "trailingComma": "es5", 44 "semi": false, 45 }, 46 ], 47 }, 48} 49コード
回答1件
あなたの回答
tips
プレビュー