{"action":"created","issue":{"url":"https://api.github.com/repos/Microsoft/TypeScript/issues/5082","labels_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/5082/labels{/name}","comments_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/5082/comments","events_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/5082/events","html_url":"https://github.com/Microsoft/TypeScript/issues/5082","id":109553265,"number":5082,"title":"Design Meeting Notes, 10/02/2015","user":{"login":"RyanCavanaugh","id":6685088,"avatar_url":"https://avatars.githubusercontent.com/u/6685088?v=3","gravatar_id":"","url":"https://api.github.com/users/RyanCavanaugh","html_url":"https://github.com/RyanCavanaugh","followers_url":"https://api.github.com/users/RyanCavanaugh/followers","following_url":"https://api.github.com/users/RyanCavanaugh/following{/other_user}","gists_url":"https://api.github.com/users/RyanCavanaugh/gists{/gist_id}","starred_url":"https://api.github.com/users/RyanCavanaugh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RyanCavanaugh/subscriptions","organizations_url":"https://api.github.com/users/RyanCavanaugh/orgs","repos_url":"https://api.github.com/users/RyanCavanaugh/repos","events_url":"https://api.github.com/users/RyanCavanaugh/events{/privacy}","received_events_url":"https://api.github.com/users/RyanCavanaugh/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/Microsoft/TypeScript/labels/Design%20Notes","name":"Design Notes","color":"bfdadc"}],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":4,"created_at":"2015-10-02T19:05:28Z","updated_at":"2015-10-05T05:10:19Z","closed_at":"2015-10-02T19:05:31Z","body":"### Linting\r\nLinting is now turned on in the CI build :tada: \r\n * Can we make TSLint part of the build?\r\n   * Yes. Make it part of ‘runtests’\r\n\r\n### Simple reachability checks\r\n * Done as part of the binder\r\n * Cheap in terms of perf\r\n * ~Couple hundred LOC\r\n * Found two bugs in the compiler\r\n * Has some checks for e.g. while(true), but nothing extra-fancy\r\n * Does not include definite assignment\r\n   * Need a faster implementation of `Set` to do this quickly\r\n   * Suggestion: use a dynamic-implementation `Set` using bit masks for sets with fewer than 32 members\r\n * How does a user opt in to this?\r\n   * Good breaking changes: Code after 'return', for example, should be on by default\r\n   * Controversial: No implicit return, no fall-through, etc.\r\n   * What is our stance vs TSLint? e.g. `==`, implicit `;`, etc.\r\n     * Type systems are kind of linty anyway\r\n     * But we don't want to be in the business of style enforcement\r\n     * What about plugins? Too complex. Maybe it can go in the Language Service, though?\r\n * Currently four options:\r\n   * noUnusedLabels (on by default)\r\n   * noFallThrough (off by default)\r\n   * noImplicitReturn (off by default)\r\n   * noUnreachableCode (on by default)\r\n * 'Strict' mode that combines some/all of these?\r\n   * Nope\r\n * How do we name these? `noImplicitAny` vs `allowImplicitAny`, `allowUnreachableCode` vs `noUnreachableCode`\r\n   * What about `implicitAny=false`?\r\n   * What about these names makes them obviously boolean?\r\n   * `noFoo` / `allowFoo` pairs?\r\n   * Can we standardize on `no` ?\r\n   * Commandline parser doesn't allow non-true boolean flags\r\n   * Take offline and endure bikeshedding in the interim\r\n * :+1: in general\r\n\r\n### `abstract` enhancements\r\n * In class expressions (#4578): No.\r\n * `export default abstract` (#3792)\r\n   * We limited this in the grammar to avoid keyword soup\r\n   * What is this limit for?\r\n     * `export default` is kind of like a declaration and kind of like an expression\r\n   * Workaround is simple\r\n   * Is anyone *actually* hitting this?\r\n   * Refusal to come to consensus ...\r\n * `abstract` properties (#4669)\r\n   * :-1: This doesn't make sense to us. The slot always implicitly exists; delegate to protected methods if you want to enforce a getter/setter contract\r\n * Make `abstract` classes implicitly abstractly implement their base interface (#4670)\r\n   * Big convenience, but how do you get into this situation?\r\n     * You are implementing ~half of some foreign interface\r\n   * This is actually very confusing semantics when it comes to which members appear?\r\n     * Properties? Methods? Properties with call signatures? We don't make strong distinctions here\r\n   * Nothing appears on the prototype chain\r\n   * :-1: due to unclear semantics around properties\r\n * A way to enforce the static shape of a class (no issue)\r\n   * e.g. `class Foo { abstract static bar() { } }`\r\n   * We already lack a way to declare that a class (static side) or namespace implements some interface\r\n     * Should explore this problem space first\r\n   * Start with #420\r\n * `abstract` classes shouldn't require a `super` call (#4429)\r\n   * e.g. only require classes with a declared constructor to call super\r\n   * This is an ES6 requirement, so no\r\n * Intersections of abstract constructor functions have construct signatures that aren't abstract (#4559)\r\n   * How does this function come to exist?\r\n   * Not clear that this should always be `abstract`\r\n   * Out of time"},"comment":{"url":"https://api.github.com/repos/Microsoft/TypeScript/issues/comments/145431820","html_url":"https://github.com/Microsoft/TypeScript/issues/5082#issuecomment-145431820","issue_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/5082","id":145431820,"user":{"login":"denvned","id":3933789,"avatar_url":"https://avatars.githubusercontent.com/u/3933789?v=3","gravatar_id":"","url":"https://api.github.com/users/denvned","html_url":"https://github.com/denvned","followers_url":"https://api.github.com/users/denvned/followers","following_url":"https://api.github.com/users/denvned/following{/other_user}","gists_url":"https://api.github.com/users/denvned/gists{/gist_id}","starred_url":"https://api.github.com/users/denvned/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/denvned/subscriptions","organizations_url":"https://api.github.com/users/denvned/orgs","repos_url":"https://api.github.com/users/denvned/repos","events_url":"https://api.github.com/users/denvned/events{/privacy}","received_events_url":"https://api.github.com/users/denvned/received_events","type":"User","site_admin":false},"created_at":"2015-10-05T05:10:19Z","updated_at":"2015-10-05T05:10:19Z","body":"Today I can write:\r\n```TypeScript\r\ninterface A {\r\n    b;\r\n}\r\nclass B implements A {\r\n    get b() { ... }\r\n    set b(v) { ... }\r\n}\r\n```\r\nBut why should not I be able to write the following then?\r\n```\r\nabstract class A {\r\n    abstract b;\r\n}\r\nclass B extends A {\r\n    get b() { ... }\r\n    set b(v) { ... }\r\n}\r\n```\r\n"}}